Condividi tramite


Sintassi del punto di interruzione

Quando si crea un punto di interruzione, è possibile usare gli elementi di sintassi seguenti, tramite la finestra Debugger Command o tramite l'interfaccia grafica WinDbg.

Indirizzi in punti di interruzione

I punti di interruzione supportano molti tipi di sintassi degli indirizzi, tra cui indirizzi virtuali, offset di funzione e numeri di riga sorgente. Ad esempio, è possibile usare uno dei comandi seguenti per impostare i punti di interruzione:

0:000> bp 0040108c
0:000> bp main+5c
0:000> bp `source.c:31`

Per altre informazioni su questa sintassi, vedere sintassi delle espressioni numeriche, sintassi della riga di origine e argomenti dei singoli comandi.

Punti di interruzione sui metodi

Se si desidera inserire un punto di interruzione nel metodo MyMethod nella classe MyClass , è possibile usare due sintassi diverse:

  • Nella sintassi dell'espressione MASM è possibile indicare un metodo con due punti o due trattini bassi.

    0:000> bp MyClass::MyMethod 
    0:000> bp MyClass__MyMethod 
    
  • Nella sintassi dell'espressione C++ è necessario indicare un metodo con due punti.

    0:000> bp @@( MyClass::MyMethod ) 
    

Se si vuole usare un comando di punto di interruzione più complesso, è consigliabile usare la sintassi delle espressioni MASM. Per altre informazioni sulla sintassi delle espressioni, vedere Valutazione di espressioni.

Punti di interruzione che usano espressioni MASM complesse

Per impostare un punto di interruzione su funzioni complesse, incluse quelle che contengono spazi, così come su un metodo di una classe pubblica C++, racchiudere l'espressione tra parentesi. Ad esempio, usare bp (?? MyPublic) o bp (operatore new).

Una tecnica più versatile consiste nell'usare la sintassi @!"chars". Si tratta di un escape speciale nell'analizzatore MASM che consente di fornire testo arbitrario per la risoluzione dei simboli. È necessario iniziare con i tre simboli @!" e terminare con una virgoletta ("). Senza questa sintassi, non è possibile usare spazi, parentesi angolari (<, >) o altri caratteri speciali nei nomi dei simboli nell'analizzatore MASM. Questa sintassi è esclusivamente per i nomi e non per i parametri. I modelli e gli overload sono le origini principali dei simboli che richiedono questa notazione tra virgolette. È anche possibile impostare il comando bu usando la sintassi 'chars', come illustrato nell'esempio di codice seguente.

0:000> bu @!"ExecutableName!std::pair<unsigned int,std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> > >::operator="

In questo esempio ExecutableName è il nome di un file eseguibile.

Questa sintassi di escape è più utile per C++ (ad esempio, operatori di overload) anziché C perché non sono presenti spazi (o caratteri speciali) nei nomi di funzione C. Tuttavia, questa sintassi è importante anche per un sacco di codice gestito a causa dell'uso considerevole di overload in .NET Framework.

Per impostare un punto di interruzione su testo arbitrario nella sintassi C++, usare bu @@c++(text) per i simboli compatibili con C++.

Punti di interruzione negli script

Gli ID dei punti di interruzione non devono essere indicati in modo esplicito. È invece possibile usare un'espressione numerica che si risolve in un numero intero che corrisponde a un ID punto di interruzione. Per indicare che l'espressione deve essere interpretata come punto di interruzione, utilizzare la sintassi seguente.

b?[Expression]

In questa sintassi sono necessarie le parentesi quadre ed Expression è l'acronimo di qualsiasi espressione numerica che si risolve in un numero intero che corrisponde a un ID punto di interruzione.

Questa sintassi consente agli script del debugger di selezionare a livello di codice un punto di interruzione. Nell'esempio seguente il punto di interruzione cambia a seconda del valore di uno pseudoregistro definito dall'utente.

b?[@$t0]

Pseudoregistrazione dei punti di interruzione

Se si desidera fare riferimento a un indirizzo del punto di interruzione in un'espressione, è possibile usare uno pseudoregistro con la sintassinumero $bp, dove Number è l'ID punto di interruzione. Per altre informazioni su questa sintassi, vedere sintassi Pseudo-Register.

Risoluzione ambigua dei punti di interruzione

Nella versione 10.0.25310.1001 e successive del motore del debugger è ora supportata la risoluzione ambigua dei punti di interruzione. I punti di interruzione ambigui consentono al debugger di impostare punti di interruzione in determinati scenari in cui un'espressione del punto di interruzione viene risolta in più posizioni. Per altre informazioni, vedere Risoluzione ambigua dei punti di interruzione.

Vedere anche

Uso dei punti di interruzione

bp, bu, bm (Imposta punto di interruzione)

Punti di interruzione non risolti (punti di interruzione bu)