Avatar billede sessa Nybegynder
18. februar 2008 - 21:12 Der er 1 løsning

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?
Avatar billede sessa Nybegynder
07. juni 2008 - 09:27 #1
Jeg må nok hellere lukke...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester