Debugger benutzen ohne Zielprozess anzuhalten

18/12/2008 - 03:16 von Marc vLiebhorst | Report spam
Hallo,

ich versuche WinDBG oder VisualStudioDebugger einzusetzen, aber scheinbar
kann man nur damit arbeiten (Watches setzen, im Disassembler rumscrollen,
etc) wenn der Zielprozess angehalten ist. Können das die beiden Programme
denn wirklich nicht anders? Ich vermute nàmlich ich bin nur zu blö.. blind
die passende Option zu finden.

Danke für jede Hilfe.
Mit freundlichen Grüßen,
Markus
 

Lesen sie die antworten

#1 Günter Prossliner
02/01/2009 - 13:28 | Warnen spam
Hallo Marc!

ich versuche WinDBG oder VisualStudioDebugger einzusetzen, aber
scheinbar kann man nur damit arbeiten (Watches setzen, im
Disassembler rumscrollen, etc) wenn der Zielprozess angehalten ist.



Für VS: Eine Überwachung (Watch-Window) kann nur evaluiert werden, wenn der
Prozess (oder zumindest der Thread) angehalten ist. Ansonsten ist nicht
klar, auf welchen Kontext ist die Überwachung bezieht. In windbg gibt es
dieses Konzept AFAIK gar nicht, dort geht das über das Memory - Window oder
Kommandos wie dt oder !do (für sos).

Auch für das Setzen von Breakpoints muss der Prozess prinzipiell angehalten
werden, da Breakpoints so implementiert sind, dass dort ein spezieller
Interupt ausgelöst wird (zumindest unmanaged, cordbg wird das ggf anders
lösen?), also der Maschinencode veràndert wird. VS "versteckt" das AFAIK
insofern, dass der Prozess kurz angehalten, der Breakpoint gesetzt, und der
Prozess dann fortgesetzt wird. In wdg muss man solche Automatismen selbst
scripten. Dafür ist das dort möglich. Ich hatte z.b. schon mal eine .bat
inkl. windbg script geschrieben, welches sich an einen Prozess attached,
einen Breakpoint auf eine bestimmte Methode setzt, und beim Treffen auf
diesen Breakpoint ein Dump erstellt, und anschliessen den Prozess fortführt
und sich selbst dedatched.

Ich würde mir schon teilweise auch wünschen dass windbg diverse Commands
(eben z.b. bp) im "BUSY" Modus unterstützt, allerdings ist dort eigentlich
die gesamte UI disabled.

Können das die beiden Programme denn wirklich nicht anders?



windg kenn das "Noninvasive" Attach. Allerdings sind die Befehle dort sehr
eingeschrànkt.

Debugging in Windows làuft generell über eine Form von Message-Handling. Das
heisst, dass das OS im Prozess des Debuggees den Debugger über Events (z.b.
Breakpoint hit, Module loaded, ...) aufruft, und den Prozess solange anhàlt,
bis die Ausführung der Debug Messasge Procedure beendet ist.

Ganz nebenbei ist es für das Debuggen eigentlich sehr maßgeblich, dass sich
der Zustand des Prozesses nicht àndert solange der Debugger die Kontrolle
darüber hat. Das wird eben durch das Anhalten der Prozesse erreicht.




mfg GP

Ähnliche fragen