Condividi tramite


Controllo delle flag e dei parametri dei punti di interruzione

Esistono diversi metodi che possono essere usati per determinare le informazioni di base sui punti di interruzione:

  • GetId restituisce l'ID del punto di interruzione.

  • GetType restituisce il tipo di punto di interruzione (software o processore) e il tipo di processore effettivo in cui è impostato il punto di interruzione.

  • GetAdder restituisce il client che ha aggiunto il punto di interruzione.

  • GetOffset restituisce l'indirizzo di un punto di interruzione.

  • GetOffsetExpression restituisce la stringa di espressione che specifica la posizione del punto di interruzione.

Oltre alla posizione e al tipo di punto di interruzione, un punto di interruzione ha diversi parametri che ne controllano il comportamento.

I parametri dei punti di interruzione possono essere controllati tramite un'ampia gamma di metodi specifici. Inoltre, la maggior parte dei parametri può essere eseguita insieme usando GetParameters.

Bandiere del punto di interruzione

Le bandiere dei punti di interruzione sono un tipo di parametri dei punti di interruzione.

È possibile eseguire query su flag di punti di interruzione usando GetFlags. Possono essere modificati usando AddFlags, RemoveFlags o SetFlags.

Le flag dei punti di interruzione formano un campo di bit. I possibili flag che possono essere usati in questo campo di bit e i relativi significati sono i seguenti:

DEBUG_BREAKPOINT_ENABLED
Quando questo flag è impostato, il punto di interruzione è abilitato e avrà il suo effetto normale. Quando questo flag non è impostato, il punto di interruzione è disabilitato e non avrà alcun effetto. Se si desidera disattivare temporaneamente un punto di interruzione, è possibile rimuovere questo flag; è quindi facile aggiungere questo flag quando si vuole riabilitare questo punto di interruzione.

DEBUG_BREAKPOINT_ADDER_ONLY
Quando questo flag è impostato, il punto di interruzione è un punto di interruzione privato. Questo punto di interruzione è visibile solo al client che l'ha aggiunto. In questo caso, altri client non saranno in grado di eseguire query sul motore per il punto di interruzione e il motore non invierà eventi generati dal punto di interruzione ad altri client. Tutti i callback (evento e output) correlati a questo punto di interruzione verranno inviati solo a questo client. Vedere GetAdder.

DEBUG_BREAKPOINT_GO_ONLY
Quando questo flag è impostato, il punto di interruzione verrà attivato solo se la destinazione è in esecuzione non limitata. Non verrà attivato se il motore esegue istruzioni dettagliate nella destinazione.

DEBUG_BREAKPOINT_ONE_SHOT
Quando questo flag è impostato, il punto di interruzione si rimuoverà automaticamente la prima volta che viene attivato.

DEBUG_BREAKPOINT_DEFERRED
Quando questo flag è impostato, il punto di interruzione viene posticipato. Questo flag viene impostato dal motore quando viene specificato l'offset del punto di interruzione usando un'espressione simbolica e il motore non può valutare l'espressione. Ogni volta che un modulo viene caricato o scaricato nella destinazione, il motore tenterà di rivalutare l'espressione per tutti i punti di interruzione la cui posizione viene specificata usando un'espressione. Quelli che non possono essere valutati vengono contrassegnati come posticipati. Questo flag non può essere modificato da alcun client.

Altri parametri del punto di interruzione

I parametri dei punti di interruzione includono anche:

Conteggio dei passaggi
Se al punto di interruzione è associato un conteggio dei passaggi, non verrà attivato finché la destinazione non ha superato il punto di interruzione il numero specificato di volte. Il conteggio dei passaggi originariamente impostato è reperibile usando GetPassCount. Il numero di volte rimanenti in cui il motore passerà il punto di interruzione prima della sua attivazione, è possibile trovarlo usando GetCurrentPassCount. Il conteggio dei passaggi può essere reimpostato su un nuovo valore usando SetPassCount.

Thread della partita
Se al punto di interruzione è associato un thread, questo verrà ignorato dal motore quando viene rilevato da qualsiasi altro thread. Il thread può essere trovato usando GetMatchThreadId e può essere modificato tramite SetMatchThreadId.

Comando
Al punto di interruzione può essere associato un comando. Il comando viene eseguito quando viene attivato il punto di interruzione. Questo comando è reperibile usando GetCommand e può essere modificato tramite SetCommand.

dimensione
Se il punto di interruzione è un punto di interruzione del processore, deve avere una dimensione specificata. Ciò determina le dimensioni del blocco di memoria il cui accesso attiverà il punto di interruzione, ovvero l'inizio del blocco è la posizione del punto di interruzione. Le dimensioni sono disponibili usando GetDataParameters e possono essere modificate tramite SetDataParameters.

Tipo di accesso
Se il punto di interruzione è un punto di interruzione del processore, deve avere un tipo di accesso. Determina il tipo di accesso che attiverà il punto di interruzione. Ad esempio, il punto di interruzione può essere attivato se il target legge, scrive o esegue istruzioni nella memoria specificata dal punto di interruzione. Il tipo di accesso è reperibile tramite GetDataParameters e può essere modificato tramite SetDataParameters.

Parametri validi per i punti di interruzione del processore

Per i punti di interruzione del processore sono disponibili i tipi di accesso seguenti:

Valore Descrizione

DEBUG_BREAK_READ

Il punto di interruzione verrà attivato quando la CPU legge la memoria nel blocco di memoria del punto di interruzione.

DEBUG_BREAK_WRITE

Il punto di interruzione verrà attivato quando la CPU scrive memoria nel blocco di memoria del punto di interruzione.

DEBUG_BREAK_READ | DEBUG_BREAK_WRITE

Il punto di interruzione verrà attivato quando la CPU legge o scrive memoria nel blocco di memoria del punto di interruzione.

DEBUG_BREAK_EXECUTE

Il punto di interruzione verrà attivato quando la CPU recupera l'istruzione nel blocco di memoria del punto di interruzione.

DEBUG_BREAK_IO

Il punto di interruzione verrà attivato quando si accede alla porta di I/O nel blocco di memoria dei punti di interruzione. (solo Windows XP e Microsoft Windows Server 2003, solo modalità kernel, solo x86)

Non tutti i tipi di accesso e le dimensioni sono supportati in tutti i processori. Sono supportati i tipi di accesso e le dimensioni seguenti:

x86
Sono supportati tutti i tipi di accesso. DEBUG_BREAK_READ si comporta come DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. Le dimensioni devono essere 1, 2 o 4. L'indirizzo del punto di interruzione deve essere un multiplo delle dimensioni.

x64
Sono supportati tutti i tipi di accesso. DEBUG_BREAK_READ si comporta come DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. Le dimensioni devono essere 1, 2, 4 o 8. L'indirizzo del punto di interruzione deve essere un multiplo delle dimensioni.