Debug con XamarinDebugging with Xamarin

Visual Studio per Mac ha un debugger nativo che offre supporto per il debug per applicazioni Xamarin.iOS, Xamarin.Mac e Xamarin.Android.Visual Studio for Mac has a native debugger allowing debugging support for Xamarin.iOS, Xamarin.Mac, and Xamarin.Android applications.

Visual Studio per Mac usa il debugger Mono Soft, implementato nel runtime di Mono, per eseguire il debug di codice gestito in tutte le piattaforme.Visual Studio for Mac uses the Mono Soft Debugger, which is implemented into the Mono runtime, allowing Visual Studio for Mac to debug managed code across all platforms.

DebuggerThe Debugger

Visual Studio per Mac usa il debugger Mono Soft per eseguire il debug di codice gestito (C# r F#) in tutte le applicazioni Xamarin.Visual Studio for Mac uses the Mono Soft Debugger to debug managed (C# or F#) code in all Xamarin applications. Il debugger Mono Soft è diverso dai normali debugger in quanto è un debugger cooperativo integrato nel runtime di Mono. Il codice generato e il runtime di Mono cooperano con l'IDE per fornire l'esperienza di debug.The Mono Soft debugger is different from regular debuggers in that it is a co-operative debugger that is built into the Mono runtime; the generated code and Mono runtime co-operate with the IDE to provide a debugging experience. Il runtime di Mono espone la funzionalità di debug tramite un protocollo di rete, su cui è possibile leggere altre informazioni nella documentazione di Mono.The Mono runtime exposes the debugging functionality through a wire protocol, which you can read more about in the Mono documentation.

I debugger di tipo hard, come LLDB o GDB, controllano un programma in modo invisibile e senza la cooperazione del programma stesso, ma possono essere utili per il debug di applicazioni Xamarin quando è necessario eseguire il debug di codice iOS o Android nativo.Hard debuggers, such as LLDB or GDB, control a program without the knowledge or cooperation from the debugged program, but can still be useful when debugging Xamarin applications in the event that you need to debug native iOS or Android code.

Uso del debuggerUsing the debugger

Per avviare il debug di qualsiasi applicazione, assicurarsi sempre che la configurazione sia impostata su Debug.To start debugging any application, always ensure that the configuration is set to Debug. La configurazione di debug offre un utile set di strumenti per il supporto del debug, come l'impostazione di punti di interruzione, l'uso di visualizzatori di dati e la visualizzazione dello stack di chiamate:The debug configuration provides a helpful set of tools to support debugging, such as breakpoints, using data visualizers, and viewing the call stack:

Configurazione di debug

Impostazione di un punto di interruzioneSetting a breakpoint

Per impostare un punto di interruzione nell'IDE, fare clic sull'area del margine nell'editor, accanto al numero di riga del codice in cui si vuole applicare l'interruzione:To set a breakpoint in your IDE, click on the margin area of your editor, next to the line number of the code where you wish to break:

Impostazione di un punto di interruzione nel margine

È possibile visualizzare tutti i punti di interruzione impostati nel codice passando al riquadro Punti di interruzione:You can view all the breakpoints that have been set in your code by going to the Breakpoints pad:

Elenco dei punti di interruzione

Avvia debugStart debugging

Per avviare il debug, selezionare il dispositivo di destinazione o l'emulatore o un altro strumento simile nell'IDE:To start debugging, select the target device or similar/emulator in your IDE:

Selezionare il dispositivo di destinazione

Distribuire quindi l'applicazione premendo il pulsante Esegui o Comando+INVIO.Then deploy your application by pressing the Play button, or Cmd + return. Quando si raggiunge un punto di interruzione, il codice viene evidenziato in giallo:When you hit a breakpoint, the code will be highlighted yellow:

Evidenziazione che indica il raggiungimento di un punto di interruzione

A questo punto, è possibile usare strumenti di debug, come quello usato per esaminare i valori degli oggetti, per ottenere altre informazioni su quello che accade nel codice:Debugging tools, such as the one used to inspect the values of objects, can be used at this point to get more information about what is happening in your code:

Visualizzazioni di debug

Punti di interruzione condizionaliConditional breakpoints

È anche possibile impostare regole che determinano i casi in cui deve essere presente un punto di interruzione, ovvero aggiungendo un punto di interruzione condizionale.You can also set rules dictating the circumstances under which a breakpoint should occur, this is known as adding a conditional breakpoint. Per impostare un punto di interruzione condizionale, accedere alla finestra Proprietà punto di interruzione in uno dei due modi seguenti:To set a conditional breakpoint, access the Breakpoint Properties window, which can be done in two ways:

  • Per aggiungere un nuovo punto di interruzione condizionale, fare clic con il pulsante destro del mouse sul margine dell'editor, a sinistra del numero di riga per il codice in cui si vuole impostare il punto di interruzione, e quindi scegliere Nuovo punto di interruzione:To add a new conditional breakpoint, right-click on the editor margin, to the left of the line number for the code you wish to set a breakpoint on, and select New Breakpoint:

Menu di scelta rapida Punto di interruzione

  • Per aggiungere una condizione a un punto di interruzione, fare clic con il pulsante destro del mouse sul punto di interruzione e scegliere Proprietà punto di interruzione oppure selezionare il pulsante Modifica punto di interruzione, mostrato di seguito, nel riquadro Punti di interruzione:To add a condition to an existing breakpoint, right-click on the breakpoint and select Breakpoint Properties, or, in the Breakpoints Pad, select the Edit Breakpoint button illustrated below:

Modifica del punto di interruzione esistente nel riquadro Punti di interruzione

È quindi possibile immettere la condizione in base alla quale deve essere aggiunto il punto di interruzione:You can then enter the condition under which you want the breakpoint to occur:

Condizioni in Modifica punto di interruzione

Esecuzione di codice istruzione per istruzioneStepping through code

Quando viene raggiunto un punto di interruzione, lo strumento di debug permette di ottenere il controllo sull'esecuzione del programma.When a breakpoint has been reached, the Debug tools enable you to get control over the program's execution. Visual Studio per Mac visualizza quattro pulsanti, per eseguire e scorrere il codice.Visual Studio for Mac will display four buttons, allowing you to run and step through the code. I pulsanti avranno l'aspetto seguente in Visual Studio per Mac:In Visual Studio for Mac, they will look like the following:

Pulsanti per scorrere il codice

Ecco i quattro pulsanti:Here are the four buttons:

  • Esegui: avvia l'esecuzione del codice, fino al punto di interruzione successivo.Play - This will begin executing the code, until the next breakpoint.
  • Esegui istruzione/routine: esegue la riga di codice successiva.Step Over - This will execute the next line of code. Se la riga successiva è una chiamata di funzione, il pulsante esegue la funzione e si ferma alla riga di codice successiva, dopo la funzione.If the next line is a function call, Step Over will execute the function, and will stop at the next line of code after the function.
  • Esegui istruzione: anche questo pulsante esegue la riga di codice successiva.Step Into - This will also execute the next line of code. Se la riga successiva è una chiamata di funzione, il pulsante si ferma alla prima riga della funzione, permettendo di continuare a eseguire il debug della funzione riga per riga.If the next line is a function call, Step Into will stop at the first line of the function, allowing you to continue line-by-line debugging of the function. Se la riga successiva non è una funzione, il pulsante si comporta come il pulsante Esegui istruzione/routine.If the next line is not a function, it will behave the same as Step Over.
  • Esci da istruzione/routine: torna alla riga in cui è stata chiamata la funzione corrente.Step Out - This will return to the line where the current function was called.

Debug di librerie di classi di MonoDebugging Mono's class libraries

I prodotti Xamarin vengono forniti con il codice sorgente per le librerie di classi di Mono, che può essere usato per eseguire istruzioni passo a passo dal debugger ed esaminare il funzionamento sottostante.Xamarin products ship with the source code for Mono's class libraries, and you can use this to single step from the debugger to inspect how things are working under the hood.

Poiché questa funzionalità usa più memoria durante il debug, è disattivata per impostazione predefinita.Since this feature consumes more memory during debugging, it is turned off by default.

Per abilitare questa funzionalità, passare a Visual Studio per Mac > Preferenze > Debugger e assicurarsi che l'opzione Esegui solo il debug del codice del progetto senza eseguire l'istruzione nel codice del framework.To enable this feature, browse to Visual Studio for Mac > Preferences > Debugger and ensure that the "Debug project code only; do not step into framework code." sia deselezionata, come mostrato di seguito:option is unselected, as illustrated below:

Opzione Esegui solo il debug del codice del progetto senza eseguire l'istruzione nel codice del framework

Vedere ancheSee also