Zum deaktivieren eines programmatischen breakpoint / geltend machen?
-
02-07-2019 - |
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?
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)