Share via


Procedura dettagliata: debug di una soluzione che include sia codice gestito che nativo

Aggiornamento: novembre 2007

In questa procedura dettagliata viene illustrato come eseguire il debug di una soluzione che include componenti .NET Compact Framework, sia nativi che gestiti. In Visual Studio non è supportato questo tipo di debug di interoperabilità delle applicazioni per dispositivi. Pertanto non è possibile disporre di debugger sia per codice nativo che gestito contemporaneamente.

La tecnica consigliata per eseguire il debug di una soluzione che comprende elementi sia nativi che gestiti consiste nel connettere il debugger necessario per una determinata sezione, ad esempio una sezione gestita, quindi disconnetterlo e connettere l'altro debugger quando necessario. È possibile ripetere le procedure di connessione e disconnessione ogni volta che si rendono necessarie per procedere con il programma.

Nota:

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Questa procedura è stata scritta utilizzando Impostazioni di sviluppo di Visual C#. Include le sezioni seguenti:

  • Attivazione della connessione del debugger gestito

  • Avvio dell'applicazione

  • Impostazione di un punto di interruzione nel codice nativo

  • Connessione con il debugger nativo

  • Esecuzione fino al punto di interruzione nativo

  • Connessione con il debugger gestito

  • Impostazione di un punto di interruzione nel codice gestito

  • Esecuzione fino al punto di interruzione gestito

  • Conclusione

Prerequisiti

Questa procedura dettagliata è basata su una soluzione compilata tramite un'altra procedura, Procedura dettagliata: Hello World: esempio di interoperabilità COM per dispositivi Smart Device. Assicurarsi che tale procedura dettagliata sia stata compilata ed eseguita.

Attivazione della connessione del debugger gestito

Per impostazione predefinita i dispositivi, inclusi gli emulatori, non consentono la connessione del debugger gestito a processi che sono già in fase di esecuzione. La connessione del debugger gestito a un processo in fase di esecuzione è una situazione che si verifica generalmente nel caso di soluzioni di dispositivi che includono codice sia gestito che nativo.

Il primo passaggio consiste nell'impostare il dispositivo in modo da consentire la connessione del debugger gestito a un processo già in esecuzione. Questo avviene impostando la chiave del Registro di sistema.

Nota:

L'impostazione della chiave ha effetto solo sulla connessione a processi gestiti già in fase di esecuzione. Non ha effetto sull'avvio di un progetto tramite l'opzione di  avvio con debug (F5). Tuttavia, se si effettua la disconnessione dopo la scelta di Avvia debug, sarà necessario riconnettere il processo e avviare nuovamente il debug.

Per consentire la connessione del debugger gestito a un processo in esecuzione

  1. Scegliere Tutti i programmi dal menu Start di Windows, scegliere Microsoft Visual Studio 2008, Strumenti remoti di Visual Studio, quindi fare clic su Remote Registry Editor.

  2. Nella finestra Seleziona un dispositivo Windows CE espandere Windows Mobile 5.0 Pocket PC SDK, quindi fare clic su Windows Mobile 5.0 Pocket PC - Emulatore. Questo è il dispositivo di destinazione della procedura.

  3. Scegliere OK.

    Verrà visualizzata la finestra Connessione al dispositivo in corso..., che illustra lo stato della connessione, quindi verranno aperti l'emulatore di dispositivo e il Remote Registry Editor di Windows CE.

  4. Nell'Editor del Registro di sistema espandere Windows Mobile 5.0 Pocket PC - Emulatore, quindi creare la chiave seguente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsot\.NETCompactFramework\Managed Debugger.

    Creare la chiave facendo clic con il pulsante destro del mouse su .NETCompactFramework, quindi scegliendo Nuovo e infine Chiave.

    È importante notare che tra "Managed" e "Debugger" è stato lasciato uno spazio.

  5. Creare un DWORD denominato AttachEnabled.

    Creare il DWORD facendo clic con il pulsante destro del mouse su Debugger gestito, quindi scegliendo Nuovo e infine Valore DWORD.

  6. Specificare AttachEnabled per l'opzione Nome e 1 per l'opzione Valore.

    Nota:

    L'impostazione della chiave di debug per il dispositivo riduce significativamente le prestazioni. Quando non si esegue il debug, disattivare la funzionalità reimpostando il valore dei dati su 0.

  7. Lasciare aperto l'emulatore di dispositivo per le fasi rimanenti, al fine di conservare le impostazioni del Registro. È possibile chiudere l'editor del Registro.

Avvio dell'applicazione

Il passaggio successivo consiste nell'avviare l'applicazione InteropSolution.

Per avviare l'applicazione

  1. Aprire la soluzione creata in Procedura dettagliata: Hello World: esempio di interoperabilità COM per dispositivi Smart Device.

    Verificare che Windows Mobile 5.0 Pocket PC - Emulatore sia visualizzato nella casella Dispositivo di destinazione sulla barra degli strumenti.

  2. Scegliere Avvia debug dal menu Debug di Visual Studio o premere F5.

    Tramite questa operazione viene immediatamente distribuito il progetto nativo, HelloCOMObject, all'emulatore, senza ulteriori interventi da parte dell'utente.

  3. Quando viene visualizzata la finestra di dialogo Distribuisci SayHello selezionare Windows Mobile 5.0 Pocket PC - Emulatore, quindi scegliere Distribuisci.

    In questo modo verrà distribuito il progetto gestito.

    L'applicazione verrà aperta nell'emulatore. Non premere il pulsante.

Impostazione di un punto di interruzione nel codice nativo

La fase successiva prevede l'impostazione di un punto di interruzione nel codice nativo, al fine di preparare la connessione del debugger nativo.

Per impostare un punto di interruzione nel codice nativo

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Hello.cpp, quindi scegliere Visualizza codice.

  2. Inserire un punto di interruzione nella riga che inizia con *text, facendo clic nel margine sinistro dell'editor di codice.

    Il simbolo del punto di interruzione viene visualizzato come un cerchio vuoto con un punto esclamativo che indica che attualmente non è possibile risolvere il punto di interruzione. Questo avviene in quanto, a questo punto, mancano le origini e i simboli appropriati.

  3. Scegliere Finestre dal menu Debug di Visual Studio, quindi Moduli.

    Nella finestra Moduli sono visualizzati tutti i moduli caricati fino a questo punto, ad esempio l'applicazione gestita SayHello.exe. Si noti che il file HelloCOMObject.dll nativo non è ancora stato caricato, in quanto non è ancora stato fatto clic sul pulsante nell'applicazione.

Connessione con il debugger nativo

La fase successiva prevede la disconnessione del debugger gestito, in modo che si possa collegare il debugger nativo. Non è possibile connettere entrambi i debugger contemporaneamente per i progetti di dispositivi. Questi passaggi devono essere eseguiti ogni volta che si desidera passare dal debugger gestito a quello nativo.

Per connettere il debugger nativo

  1. Scegliere Disconnetti tutto dal menu Debug di Visual Studio.

    Questa operazione consente la disconnessione del debugger gestito e allo stesso tempo permette di continuare l'esecuzione dell'applicazione.

  2. Scegliere Connetti a processo dal menu Debug.

  3. Nella casella Trasporto, fare clic su Smart Device.

  4. Per popolare la casella Qualificatore, scegliere Sfoglia.

  5. Nella finestra di dialogo Connetti a dispositivo selezionare Windows Mobile 5.0 Pocket PC - Emulatore, quindi scegliere Connetti.

  6. Per popolare la casella Connetti a, scegliere Seleziona.

  7. Nella finestra di dialogo Seleziona tipo di codice, fare clic su Esegui il debug di questi tipi di codice, deselezionare la casella di controllo Gestito, selezionare la casella di controllo Nativo, quindi scegliere OK.

  8. Nella casella Processi disponibili, selezionare SayHello.exe, quindi fare clic su Connetti.

    Il debugger nativo è connesso.

Esecuzione al punto di interruzione nativo

A questo punto è possibile spostarsi fino al punto di interruzione impostato nel codice nativo. Nella finestra Moduli sono ora presenti i moduli nativi. Tuttavia, HelloCOMObject.dll non è stato ancora caricato poiché non si è fatto clic su button1.

Nota:

Se la procedura è stata eseguita in precedenza, i simboli di debug potrebbero essere già stati caricati, di conseguenza è possibile ignorare i passaggi riportati di seguito. In caso contrario, nella sezione seguente vengono descritte le operazioni necessarie al loro caricamento.

Per spostare l'esecuzione in corrispondenza del punto di interruzione nativo

  1. Nel form dell'emulatore di dispositivo, fare clic su button1.

    Nel form verrà visualizzato il messaggio Hello World!, mentre hellocomobject.dll verrà visualizzato nella finestra Moduli.

    Se nella colonna Stato simboli per hellocomobject.dll non viene visualizzato Simboli caricati, attenersi alla procedura seguente:

    1. Fare clic con il pulsante destro del mouse su hellocomobject.dll, quindi scegliere Carica simboli.

    2. Nella finestra di dialogo Trova simboli passare a InteropSolution\HelloCOMObject\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\HelloCOMObject.pdb.

    3. Scegliere Apri.

      Nella colonna Stato simboli verrà visualizzato Simboli caricati e l'indicatore del punto di interruzione indicherà ora il punto di interruzione come risolto.

  2. Nel form dell'emulatore di dispositivo, scegliere OK all'interno della finestra Hello World!, quindi fare clic nuovamente su button1.

    L'indicatore del punto di interruzione segnala che l'esecuzione si è interrotta in corrispondenza del punto di esecuzione.

  3. Scegliere Esegui istruzione dal menu Debug o premere F11.

    L'esecuzione si sposterà alla riga successiva. Questo significa che è possibile eseguire la sezione nativa della soluzione.

Connessione con il debugger gestito

La fase successiva prevede la disconnessione del debugger nativo, in modo che sia possibile connettere il debugger gestito. Non è possibile connettere entrambi i debugger contemporaneamente per i progetti di dispositivi. Questi passaggi devono essere eseguiti ogni volta che si desidera passare dal debugger nativo a quello gestito.

Per connettere il debugger gestito

  1. Scegliere Disconnetti tutto dal menu Debug di Visual Studio.

    Questa operazione consente la disconnessione del debugger nativo e allo stesso tempo di continuare l'esecuzione dell'applicazione.

  2. Scegliere Connetti a processo dal menu Debug e verificare che la casella Trasporto contenga Smart Device.

  3. Popolare la casella Qualificatore scegliendo Seleziona, selezionando Windows Mobile 5.0 Pocket PC - Emulatore, quindi facendo clic su Connetti.

  4. Per popolare la casella Connetti a, scegliere Seleziona, fare clic su Esegui il debug di questi tipi di codice, selezionare la casella Gestito, deselezionare la casella Nativo, quindi scegliere OK.

    Se viene visualizzato un messaggio che segnala che debug gestito e nativo non sono compatibili, scegliere OK.

  5. Nella casella Processi disponibili, selezionare SayHello.exe, quindi fare clic su Connetti.

    Il debugger gestito è connesso.

Impostazione di un punto di interruzione nel codice gestito

La fase successiva prevede l'impostazione di un punto di interruzione nel codice gestito, al fine di preparare la connessione del debugger gestito.

Per impostare un punto di interruzione nel codice gestito

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Form1.cs, quindi scegliere Visualizza codice.

  2. Inserire un punto di interruzione in corrispondenza della riga string text;.

Esecuzione al punto di interruzione gestito

A questo punto è possibile spostarsi fino al punto di interruzione impostato nel codice gestito.

Per spostare l'esecuzione in corrispondenza del punto di interruzione gestito

  • Nell'emulatore di dispositivo, fare clic su button1.

    L'esecuzione verrà interrotta in corrispondenza del punto di interruzione.

Conclusione

Per non compromettere le prestazioni, reimpostare la chiave del Registro di sistema su 0 quando non è più necessario connettere il debugger gestito a un processo già in esecuzione.

Vedere anche

Attività

Procedura: connettersi a processi di dispositivi gestiti

Procedura: modificare le impostazioni del Registro di sistema dei dispositivi

Altre risorse

Debug di progetti per dispositivi

Debug in Visual Studio