Debug break Anweisung



  • Hallo,

    gibt es eine Code-Anweisung/Statement welches im Debug-Built immer ein "Anhalten" ausführt? Im Release Built soll diese Stelle übergangen werden.

    Ich könnte natürlich einen Breakpoint setzen, jetzt ist es mir aber schon öfters passiert dass dieser verschoben wurde -> sehr unschön!



  • #ifdef _DEBUG
        if (IsDebuggerPresent ())    
            DebugBreak ();
    #endif // _DEBUG
    

    Der Breakpoint sitzt dann allerdings in einer Windows-DLL; du mußt deine Funktion über den Call-Stack anwählen. Alternativ und nur für 32-Bit-Builds kannst du das hier machen:

    #ifdef _DEBUG
        if (IsDebuggerPresent ())    
            asm int 3;
    #endif // _DEBUG
    


  • audacia schrieb:

    #ifdef _DEBUG
        if (IsDebuggerPresent ())    
            DebugBreak ();
    #endif // _DEBUG
    

    Der Breakpoint sitzt dann allerdings in einer Windows-DLL; du mußt deine Funktion über den Call-Stack anwählen.

    Vielen Dank, werde das mal durchprobieren



  • audacia schrieb:

    #ifdef _DEBUG
        if (IsDebuggerPresent ())    
            asm int 3;
    #endif // _DEBUG
    

    Alternativ auch den Intrinsic, geht sowohl für 32 als auch 64Bit:

    #ifdef _DEBUG
        if (IsDebuggerPresent ())    
            __debugbreak();
    #endif // _DEBUG
    


  • Wir machen es so, weil wir mit XE2 die Erfahrung gemacht haben, dass an Stellen mit ASM INT 3 Exceptions im Nicht-Debug-Build geworfen werden

    #if (defined(_DEBUG) || defined(DEBUG))
        #define DEBUG_INT3 asm int 3;
    #else
        #define DEBUG_INT3 asm nop;
    #endif
    


  • int02h schrieb:

    weil wir mit XE2 die Erfahrung gemacht haben, dass an Stellen mit ASM INT 3 Exceptions im Nicht-Debug-Build geworfen werden

    Gut beobachtet 🙂 Was denkst du, wofür ich oben #ifdef _DEBUG und if (IsDebuggerPresent()) verwendet habe?


Anmelden zum Antworten