Problem med EXCEPTION_SINGLE_STEP
Jeg prøver at forstå, hvordan en debugger virker, og i den forbindelse har jeg skrevet et lille program, hvor følgende kode indgår:WaitForDebugEvent( &dbgevent, 0 );
// exception
if ( dbgevent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT ) {
// den første (obligatoriske) igangsættelses-exception
if ( dbgevent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT ) {
context.ContextFlags = CONTEXT_CONTROL;
GetThreadContext( ht, &context );
context.EFlags = context.EFlags | 0x100;
SetThreadContext( ht, &context );
ContinueDebugEvent( dbgevent.dwProcessId, dbgevent.dwThreadId, DBG_CONTINUE );
}
else {
// andre exceptions
if ( dbgevent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_SINGLE_STEP ) {
context.ContextFlags = CONTEXT_CONTROL;
GetThreadContext( ht, &context );
context.EFlags = context.EFlags | 0x100;
SetThreadContext( ht, &context );
}
ContinueDebugEvent( dbgevent.dwProcessId, dbgevent.dwThreadId, DBG_CONTINUE );
}
}
ht er threadhandle, som jeg har fra CREATE_PROCESS_DEBUG_EVENT, altså ht = dbgevent.u.CreateProcessInfo.hThread;
Men problemet er, at man aldrig når til afsnittet med EXCEPTION_SINGLE_STEP. Jeg kan følge koden i C++Builder og se, at der opstår en EXCEPTION_BREAKPOINT, og derefter burde Trap
Flag vel blive sat, så der efterfølgende kommer en EXCEPTION_SINGLE_STEP, men der gør der altså ikke.
Hvad kan forklaringen være på det?