Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il codice in modalità utente e in modalità kernel utilizza routine diverse per entrare nel debugger.
User-Mode Rompere le routine
Una routine di interruzione provoca un'eccezione nel processo attuale, al fine di permettere al thread chiamante di segnalare il debugger associato al processo chiamante.
Per suddividere un debugger da un programma in modalità utente, usare la funzione DebugBreak. Il suo prototipo è il seguente:
VOID DebugBreak(VOID);
Quando un programma in modalità utente chiama DebugBreak, verranno eseguite le azioni seguenti:
Se è collegato un debugger in modalità utente, il programma si interromperà nel debugger. Ciò significa che il programma verrà sospeso e il debugger diventerà attivo.
Se un debugger in modalità utente non è collegato, ma il debug della modalità kernel è stato abilitato al momento dell'avvio, l'intero computer passerà al debugger del kernel. Se un debugger del kernel non è collegato, il computer si blocca e attende un debugger del kernel.
Se un debugger in modalità utente non è collegato e il debug in modalità kernel non è abilitato, il programma terminerà con un'eccezione non gestita e verrà attivato il debugger post-mortem (just-in-time). Per altre informazioni, vedere Abilitazione del debug postmortem.
Rompere le Routine Kernel-Mode
Quando un programma in modalità kernel si interrompe nel debugger, l'intero sistema operativo si blocca fino a quando il debugger del kernel non consente la ripresa dell'esecuzione. Se non è presente alcun debugger del kernel, questo viene considerato come un controllo dei bug.
La routine DbgBreakPoint funziona nel codice in modalità kernel, ma in caso contrario è simile alla routine DebugBreak in modalità utente.
Anche la routine DbgBreakPointWithStatus causa un'interruzione, ma invia anche un codice di stato a 32 bit al debugger.
Le routine KdBreakPoint e KdBreakPointWithStatus sono identiche rispettivamente a DbgBreakPoint e DbgBreakPointWithStatus, se compilate nell'ambiente di compilazione selezionato. Quando vengono compilati nell'ambiente di compilazione gratuito, non hanno alcun effetto.
Routine di interruzione condizionale Kernel-Mode
Per il codice in modalità kernel sono disponibili due routine di interruzione condizionale. Queste routine testano un'espressione logica. Se l'espressione è falsa, l'esecuzione si interrompe e il debugger viene attivato.
La macro ASSERT verifica un'espressione logica. Se l'espressione è falsa, l'esecuzione si interrompe e il debugger si attiva. L'espressione non riuscita e il relativo percorso nel programma vengono visualizzati nel debugger.
La macro ASSERTMSG è identica a ASSERT , ad eccezione del fatto che consente l'invio di un messaggio aggiuntivo al debugger.
ASSERT e ASSERTMSG sono attivi solo quando vengono compilati nell'ambiente di compilazione controllato. Quando vengono compilati nell'ambiente di compilazione gratuito, non hanno alcun effetto.