Multi-Process Debugging (Debug di più processi)

È molto comune che le soluzioni moderne sviluppate in Visual Studio per Mac abbiano più progetti indirizzati a diverse piattaforme. Ad esempio, una soluzione potrebbe avere un progetto di applicazione per dispositivi mobili basato sui dati forniti da un progetto di servizio web. Sviluppando questa soluzione, uno sviluppatore potrebbe avere la necessità di disporre di entrambi i progetti in esecuzione contemporaneamente per risolvere gli errori. A partire dalla versione del ciclo 9 di Xamarin, è ora possibile eseguire il debug di più processi in esecuzione contemporaneamente tramite Visual Studio per Mac. Questo permette di impostare punti di interruzione, controllare le variabili e visualizzare i thread in più di un progetto in esecuzione. Ciò è noto come debug di più processi.

In questa guida verranno illustrate alcune delle modifiche apportate a Visual Studio per Mac per supportare il debug di più processi, le modalità di configurazione di soluzioni per eseguire il debug di più processi e il collegamento a processi esistenti con Visual Studio per Mac.

Requisiti

Il debug di più processi richiede Visual Studio per Mac.

Modifiche IDE

Per offrire assistenza agli sviluppatori nel debug di più processi, Visual Studio per Mac ha subito alcune modifiche all'interfaccia utente. Visual Studio per Mac ha una barra degli strumenti di debug aggiornata e una nuova sezione configurazione delle soluzioni nella cartella Opzioni soluzione. Inoltre, il riquadro dei thread visualizza ora i processi in esecuzione e i thread per ogni processo. Visual Studio per Mac visualizza anche più riquadri di debug, uno per ogni processo, per alcune operazioni quali Output applicazione.

Configurazioni soluzione

Per impostazione predefinita, Visual Studio per Mac visualizzerà un unico progetto nell'area Configurazione soluzione della barra degli strumenti di debug. Quando viene avviata una sessione di debug, questo è il progetto che sarà avviato da Visual Studio per Mac e a cui sarà collegato il debugger.

Per avviare ed eseguire il debug di più processi in Visual Studio per Mac, è necessario creare una configurazione delle soluzioni. Una configurazione della soluzione descrive i progetti da includere in una soluzione quando viene avviata una sessione di debug con un clic del pulsante Start o quando viene premuto ⌘ ↩ (Cmd-INVIO). Nella schermata riportata di seguito è riportato un esempio di soluzione in Visual Studio per Mac che dispone di più configurazioni delle soluzioni:

A solution with multiple solution configurations

Parti della barra degli strumenti di debug

La barra degli strumenti di debug è stata modificata per consentire di selezionare una configurazione delle soluzioni tramite un menu di scelta rapida. In questa schermata vengono illustrate le parti della barra degli strumenti di debug:

The parts of the debug toolbar

  1. Configurazione soluzione -È possibile impostare la configurazione della soluzione facendo clic su Configurazione soluzione nella barra degli strumenti di debug e selezionando la configurazione dal menu di scelta rapida:

    A sample popup with solution configurations

  2. Destinazione compilazione - Identifica la destinazione di compilazione per i progetti. È rimasta invariata rispetto alle versioni precedenti di Visual Studio per Mac.

  3. Destinazioni dei dispositivi - Consente di selezionare i dispositivi su cui verrà eseguita la soluzione. È possibile identificare un dispositivo o un emulatore distinto per ogni progetto:

    Popup showing the devices for a project

Più riquadri di debug

Quando viene avviata la configurazione di più soluzioni, vengono visualizzati più volte alcuni riquadri di Visual Studio per Mac, uno per ogni processo. Ad esempio, nella schermata seguente sono visualizzati due riquadri Output applicazione per una soluzione che esegue due progetti:

Output Pad for a solution configuration

Più processi e Thread attivo

Quando viene rilevato un punto di interruzione in un processo, tale processo sospende l'esecuzione, mentre gli altri processi continuano a essere eseguiti. In uno scenario con un unico processo, Visual Studio per Mac può visualizzare agevolmente informazioni quali thread, variabili locali, output dell'applicazione in un unico set di riquadri. Tuttavia, quando sono presenti più processi con più punti di interruzione e potenzialmente più thread, può rivelarsi impegnativo per gli sviluppatori gestire le informazioni provenienti da una sessione di debug che sta tentando di visualizzare tutte le informazioni di tutti i thread (e processi) contemporaneamente.

Per risolvere questo problema, Visual Studio per Mac visualizzerà solo le informazioni provenienti da un thread alla volta, noto come thread attivo. Il primo thread che viene sospeso in un punto di interruzione viene considerato il thread attivo. Il thread attivo è il thread su cui è concentrata l'attenzione dello sviluppatore. I comandi di debug, ad esempio Esegui istruzione/routine ⇧⌘O (Shift-Cmd-O), verranno rilasciati al thread attivo.

Il riquadro thread visualizzerà informazioni per tutti i processi e thread in esame nella configurazione delle soluzioni e fornirà indicazioni visive riguardo a che cos'è il thread attivo:

Thread pad for a solution configuration

I thread sono raggruppati in base al processo che li ospita. Il nome del progetto e l'ID del thread attivo verranno visualizzati in grassetto e verrà visualizzata una freccia rivolta verso destra nella barra accanto al thread attivo. Nella schermata precedente, thread 1 # in Id processo 48703 (FirstProject) costituiscono il thread attivo.

Durante il debug di più processi, è possibile passare al thread attivo per visualizzare informazioni di debug per tale processo (o thread) utilizzando il riquadro thread. Per passare al thread attivo, selezionare il thread desiderato nel riquadro thread e fare doppio clic su di esso.

Esecuzione di codice istruzione per istruzione quando vengono arrestati più progetti

Quando due (o più) progetti hanno dei punti di interruzione, Visual Studio per Mac sospende entrambi i processi. È possibile soltanto eseguire un'istruzione/routine di codice nel thread attivo. L'altro processo viene messo in pausa fino a quando una modifica dell'ambito consente al debugger di spostare l'attenzione dal thread attivo. Si consideri ad esempio la seguente schermata di Visual Studio per Mac che esegue il debug di due progetti:

Visual Studio for Mac debugging two projects

In questa schermata, ogni soluzione ha il proprio punto di interruzione. All'avvio del debug, il primo punto di interruzione che si trova è nella riga 10 di MainClass in SecondProject. Poiché entrambi i progetti dispongono di punti di interruzione, ogni processo viene interrotto. Una volta rilevato il punto di interruzione, ogni chiamata di Esegui istruzione/routine fa avanzare istruzione per istruzione nel codice in Visual Studio per Mac nel thread attivo.

L'avanzamento nel codice è limitato al thread attivo, di conseguenza Visual Studio per Mac avanzerà, una riga di codice alla volta, mentre l'altro processo è ancora in pausa.

Utilizzando la schermata precedente come esempio, quando il ciclo for è terminato, Visual Studio per Mac consentirà l'esecuzione di FirstProject fino a incontrare il punto di interruzione nella riga 11 in MainClass. Per ogni comando Esegui istruzione/routine, il debugger avanzerà riga per riga in FirstProject, fino a quando gli algoritmi euristici interni di Visual Studio per Mac commutano nuovamente il thread attivo su SecondProject.

Se solo uno dei progetti avesse un punto di interruzione impostato, potrebbe essere messo in pausa soltanto quel processo. L'altro progetto continuerà a funzionare fino a quando non sarà messo in pausa dallo sviluppatore o sarà stato aggiunto un punto di interruzione.

Sospensione e ripresa di un processo

È possibile sospendere o riprendere un processo facendo clic sul processo e selezionando Sospendi o Riprendi dal menu di scelta rapida:

Pause or resume in the Thread pad

L'aspetto della barra degli strumenti di debug cambierà a seconda dello stato dei progetti in fase di debug. Quando vengono eseguiti più progetti, la barra degli strumenti di debug visualizzerà sia il pulsante Sospendi che il pulsante Riprendi laddove è presente almeno un progetto in esecuzione e uno in sospensione:

Debug toolbar

Facendo clic sul pulsante Sospendi nella barra degli strumenti di debug vengono sospesi tutti i processi in corso di debug, mentre facendo clic sul pulsante Riprendi vengono ripresi tutti i processi sospesi.

Debug di un secondo progetto

È inoltre possibile eseguire il debug di un secondo progetto una volta avviato il primo progetto da Visual Studio per Mac. Una volta avviato il primo progetto, *fare clic con il pulsante destro del mouse sul progetto nel riquadro della soluzione e selezionare Start Debugging Item (Avvia debug elemento):

Start Debugging Item

Creazione di una configurazione della soluzione

Una configurazione della soluzione indica a Visual Studio per Mac il progetto da eseguire quando viene avviata una sessione di debug con il pulsante Avvia. Può essere presente più di una configurazione della soluzione per ogni soluzione. Ciò consente di specificare quali progetti vengono eseguiti durante il debug del progetto.

Per creare una nuova configurazione della soluzione in Xamarin Studio:

  1. Aprire la finestra di dialogo Opzioni soluzione in Visual Studio per Mac e selezionare Esegui > configurazioni:

    Solution Configuration in the Solution Options dialog

  2. Fare clic sul pulsante Nuova e immettere il nome della nuova configurazione della soluzione, quindi fare clic su Crea. Verrà visualizzata la nuova configurazione della soluzione nella finestra Configurazioni:

    Naming a new solution configuration

  3. Selezionare la nuova configurazione di esecuzione nell'elenco di configurazioni. Nella finestra di dialogo Opzioni soluzione verrà visualizzato ogni progetto nella soluzione. Controllare ogni progetto che deve essere avviato quando viene avviata una sessione di debug:

    Selecting the project to start

Verrà visualizzata la configurazione della soluzione MultipleProjects nella barra degli strumenti di debug, consentendo agli sviluppatori di eseguire contemporaneamente il debug dei due progetti.

Riepilogo

In questa guida è stato descritto il debug di più processi in Visual Studio per Mac. Sono state trattate alcune delle modifiche all'IDE destinate a supportare il debug multiprocesso e sono stati descritti alcuni comportamenti associati.