Appendice B: debugger di runtime (CorDbg.exe)

In .NET Framework SDK è incluso il debugger di runtime da riga di comando denominato CorDbg.exe, che alcuni sviluppatori preferiscono utilizzare al posto della versione basata su Windows, DbgClr, e del debugger integrato in Visual Studio. Come per il debugger DbgClr, con CorDbg non vengono compilate applicazioni. Per utilizzare i compilatori, è necessario generare prima l'applicazione in modo che sia inclusa l'opzione /debug corretta.

Il debugger di runtime consente di eseguire le seguenti operazioni:

  • Avviare, connettere, continuare, disconnettere e arrestare un processo in esecuzione.
  • Visualizzare domini applicazione, assembly, moduli caricati, classi e funzioni globali.
  • Eseguire istruzioni e istruzioni/routine di origine e native.
  • Visualizzare righe del codice sorgente.
  • Impostare il valore di una variabile.
  • Impostare l'istruzione successiva su una nuova riga.
  • Impostare o visualizzare punti di interruzione.

Per visualizzare l'elenco completo di opzioni di CorDbg, immettere CorDbg /? a un prompt dei comandi.

Per una breve procedura dettagliata sull'utilizzo del Debugger di runtime, vedere di nuovo l'esempio Calculator. È possibile avviare il debugger con questo programma da un prompt dei comandi immettendo CorDbg calc.exe dalla directory contenente il file eseguibile. Verrà avviato CorDbg e saranno visualizzate le seguenti righe:

(cordbg) run calc.exe
Process 1596/0x63c created.
[thread 0x624] Thread created.
234:   using (Form f = new VersioningDemo()){ //automatically calls Dispose()

**Nota   **Se non si esegue una versione di debug di runtime, verranno visualizzati numerosi avvisi nei quali è specificato che il debugger non è in grado di caricare i simboli per gli assembly .NET di base. Questi avvisi possono essere ignorati senza conseguenze.

Eseguire a questo punto l'istruzione "pro(cessenum)":

(cordbg) pro

PID=0x49c (1596) Name=C:\...\Tutorials\Debugging\Calc\CS\calc.exe

ID=1 AppDomainName=calc.exe*

PID=0x544 (1348) Name=C:\...\aspnet_wp.exe

ID=3 AppDomainName=/LM/w3svc/1/Root/NetSDK/Debug-2-...

ID=2 AppDomainName=/LM/w3svc/1/Root/NetSDK-1-...

ID=1 AppDomainName=DefaultDomain

Da questa istruzione risulta che a Calc.exe è associato l'ID di processo 1596. Inoltre risulta che all'applicazione ASP.NET in esecuzione sul computer è associato l'ID di processo 1348. Se non sono in esecuzione versioni di debug di runtime .NET, è probabile che non siano installati i simboli per le librerie di runtime e verrà visualizzata una serie di avvisi nei quali è specificato che non è possibile caricare tali simboli. Eseguire l'istruzione "sh(ow)" per visualizzare il codice sorgente:

(cordbg) sh
229:            }
230:     }
231:
232:     [System.STAThreadAttribute()]
233:     public static void Main(string[] args) {
234*           Form f = new VersioningDemo();
235:            f.ShowDialog();
236:            //throw(new System.Exception());  //a runtime error
237:     }
238: }
239: } 

Le informazioni restituite indicano che l'esecuzione è attualmente bloccata in corrispondenza della riga 234, che è la prima riga del programma. Si consiglia, a questo punto, di provare a eseguire i seguenti comandi:

  • ap — Vengono visualizzate informazioni sul dominio applicazione.
  • l — Vengono visualizzati i moduli caricati attualmente, le classi e le funzioni globali.
  • p — Vengono stampate le variabili correnti.
  • sh 50 — Vengono visualizzate le precedenti 50 righe di codice.

Impostare quindi un "b(reakpoint)" alla riga 195, che è la prima riga della routine btnNumbersClicked:

(cordbg) b 195
Breakpoint #1 has bound to C:\...\Tutorials\Debugging\Calc\CS\calc.exe.
#1      C:\ ...\Tutorials\Debugging\Calc
\CS\Calc.cs:192 btnNumbersClicked+0x0(il) [active]

Immettere infine "con(t)" per continuare l'esecuzione del programma, che consente di visualizzare il modulo di calcolatrice. Facendo clic su uno dei pulsanti numerici della calcolatrice, si ritornerà alla riga 195 del debugger. Immettere "ex(it)" per uscire dal debugger.

Per ulteriori informazioni su CorDbg, vedere Debugger di runtime (Cordbg.exe).