Frage

Ich bin mit Visual Studio, die Entwicklung einer nativen Anwendung, ich habe einen programmatischen Haltepunkt (assert) in meinem code wird mit __asm int 3 oder __debugbreak.Manchmal, wenn ich ihn treffe, würde ich gerne deaktivieren, so dass aufeinanderfolgende Schläge in derselben Debugger-Sitzung nicht mehr brechen, in den debugger.Wie kann ich dies tun?

War es hilfreich?

Lösung

x86 / x64

Angenommen, Sie schreiben x86/x64-Anwendung, schreiben im watch-Fenster:

x86: *(char *)eip,x

x64: *(char *)rip,x

Sie sollten sehen, ein Wert, 0xcc, der opcode für INT 3.Ersetzen Sie es mit 0x90, der opcode für NOP.Sie können auch die memory-Fenster mit eip-als eine Adresse.

PPC

Angenommen, Sie schreiben PPC-Anwendung (z.B.Xbox 360), schreiben im watch-Fenster:

*(int *)iar,x

Sie sollte einen Wert 0xfeNNNNNN, der opcode für die trap (in den meisten Fällen 0x0fe00016 = bedingungslose trap).Ersetzen Sie es mit 0x60000000, der opcode für NOP.

Andere Tipps

Sie könnten versuchen, so etwas wie dieses:

#define ASSERT(x) {\
   if (!(x)) \
   { \
      static bool ignore = false; \
      if (!ignore) \
      { \
         ignore = true; \
         __asm int 3 \
      } \
   }\
}

Dieses treffen sollte die debug-nur einmal.Sie könnten sogar ein Meldungsfeld angezeigt, um den Benutzer an und Fragen, was zu tun ist:weiter (nichts geschieht), Pause (int 3 genannt wird) oder ignorieren (ignore auf true gesetzt ist, wird der Haltepunkt nie wieder schlagen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top