Interazione con il motore

Comandi ed espressioni

L'API del motore di debugger fornisce metodi per eseguire comandi e valutare espressioni, ad esempio quelle digitate nella finestra dei comandi debugger di WinDbg. Per eseguire un comando debugger, usare Esegui. In alternativa, per eseguire tutti i comandi in un file, usare ExecuteCommandFile.

Il metodo Evaluate valuta le espressioni usando la sintassi C++ o MASM. La sintassi utilizzata dal motore del debugger per valutare espressioni, ad esempio nel metodo Evaluate , viene specificata da GetExpressionSyntax e può essere modificata usando SetExpressionSyntaxByName e SetExpressionSyntax. Il numero di sintassi diverse riconosciute dal debugger viene restituito da GetNumberExpressionSyntaxes e i relativi nomi vengono restituiti da GetExpressionSyntaxNames.

Il tipo di valore restituito da Evaluate è determinato dai simboli e dalle costanti usate nella stringa valutata. Il valore è contenuto in una struttura DEBUG_VALUE e può essere eseguito il cast in tipi diversi usando CoerceValue e CoerceValues.

Alias

Gli alias sono stringhe di caratteri sostituite automaticamente con altre stringhe di caratteri quando vengono usate nei comandi e nelle espressioni del debugger. Per una panoramica degli alias, vedere Uso di alias. Il motore del debugger include diverse classi di alias.

Gli alias di nome fisso vengono indicizzati in base al numero e hanno i nomi $u 0, $u 1, ..., $u 9. I valori di questi alias possono essere impostati usando il metodo SetTextMacro e possono essere recuperati usando il metodo GetTextMacro .

Gli alias automatici e gli alias denominati dall'utente possono avere qualsiasi nome. Gli alias automatici sono definiti dal motore di debugger e gli alias denominati dall'utente vengono definiti dall'utente tramite comandi del debugger o dall'API del motore di debugger. Per definire o rimuovere un alias denominato dall'utente, usare il metodo SetTextReplacement . Il metodo GetTextReplacement restituisce il nome e il valore di un alias automatico o di un alias denominato dall'utente. Tutti gli alias denominati dall'utente possono essere rimossi usando il metodo RemoveTextReplacements . Il metodo GetNumberTextReplacements restituirà il numero di alias utente e automatici; questa operazione può essere usata con GetTextReplacement per eseguire l'iterazione di tutti questi alias. Il metodo OutputTextReplacements stampa un elenco di tutti gli alias denominati dall'utente, inclusi i nomi e i valori.

Si noti che un alias denominato dall'utente ha lo stesso nome di un alias automatico, l'alias denominato utente nasconderà l'alias automatico in modo che quando si recupera il valore dell'alias in base al nome, verrà usato l'alias denominato utente.

>Opzioni del motore

Il motore ha una serie di opzioni che controllano il suo comportamento. Queste opzioni sono elencate in DEBUG_ENGOPT_XXX. Vengono restituiti da GetEngineOptions e possono essere impostati usando SetEngineOptions. È possibile impostare singole opzioni usando AddEngineOptions e unset usando RemoveEngineOptions.

Interrompe

Un interruzione è un modo per forzare un'interruzione nel debugger o per indicare al motore di interrompere l'elaborazione del comando corrente, ad esempio premendo CTRL+Break in WinDbg.

Per richiedere un'interruzione nel debugger o interrompere l'attività corrente del debugger, usare SetInterrupt. Per verificare se è stato eseguito un interruzione, usare GetInterrupt.

Nota Quando si esegue un'attività lunga da un'estensione del debugger, è consigliabile controllare regolarmente l'estensione GetInterrupt e interrompere l'elaborazione se è stato richiesto un interruzione.

Quando si richiede un'interruzione nel debugger, il motore potrebbe timeout se la destinazione richiede troppo tempo per eseguire l'interruzione. Ciò può verificarsi se la destinazione si trova in uno stato non reattivo o se la richiesta di interruzione viene bloccata o ritardata dalla contesa delle risorse. Il tempo di attesa del motore viene restituito da GetInterruptTimeout e può essere impostato usando SetInterruptTimeout.