Debuggen verschiedener Prozesse
-
Ob das Thema nun genau hierein gehört weiss ich nicht. Eigentlich ist es eher ein Visual Studio Problem:
Ich hab ein etwas komplexeres Debugging Problem.
Meine Anwendung startet eine weitere Instanz der Anwendung um darüber entkoppelt eine bestimmte Aktion auszuführen.Problem 1.) Ich habe nicht den komplettes Sourcecode der Anwendung zur verfügung (Gerade der Code welcher die weitere Instanz startet ist nicht verfügbar).
Innerhalb der Aktion die von der 2. Instanz ausgeführt wird, wird eine Funktion gerufen welche ich Programmieren kann.
Problem 2.) Ich hänge mit den Debugger aber auf der ersten Instanz des Programms, entsprechende Breakpoints etc krieg ich also nicht ab.
Wenn ich schnell genug bin kann ich mich, nach erzeugen von Instanz 2, darauf connecten. Aber das ist mir zu Langsam (ggf fehlen mir dann einige Calls die ich mir gerne ansehen würde).
Ist es irgendwie möglich mit den Debugger automatisch auf einen weiteren Prozess einer Anwendung zu connecten? Welche Alternativen hätte ich sonst?
-
Du könntest ja ein "Thread.Sleep(10000)" o.ä. am Anfang deiner Applikation (bzw. vor deinen zu debuggenden Codestellen anhängen) und dann halt dich mit dem Debugger ranhängen.
-
Na du kannst doch dort ein Breakpoint machen wo die zweite Instanz aufgerufen wird und dann ein Step-Into mit dem Debugger machen. Dann landest du doch im Code der Anwendung. Oder versteh ich grad was falsch?
-
Das Problem ist, das ich an keiner der beiden stellen, wo die jeweilige Instanz erstellt wird. Dranhänge...
Das ganze läuft so
1.) FremdCode ruft meinen Code und lässt sich von diesen Daten zurückgeben
2.) FremdCode erstellt Instanz2
3.) FremdCode übergibt Daten an Instanz2
4.) in Instanz 2 kommts zu irgend einen FehlerIch kann also 4. nicht gut Debuggen. Da den Fehler ja nicht meine Anwendung bekommt, auf der ich mit dem Debugger hänge. Ich hab zum Glück ein paar Codezeilen aus dem Fremdcode gefunden, die unter bestimmten umständen eigenständig den Debugger starten. Das hilft mir schonmal. Ggf gibts aber wirklich ne möglichkeit sich automatisch an Prozesse zu hängen die im eigenen Programm erzeugt werden.
-
Du kannst unter "Debug"->"An Prozess ranhängen"(weiß ja nich ob du deutsch oder englisches VS hast) dich an bestimmte Prozesse ranhängen, vielleicht fliegst du dann in die Exception rein.
-
Genau so mache ich es jetzt. Aber da kann es ja schon sein das der Prozess schon etwas läuft und ich ggf wichtige sachen verpasse (Exceptions etc). Ich hätte gerne eine möglichkeit mich an den Prozess sofort bei erstellung ranzuhängen. Ich denke wohl das es das momentan im VS nicht gibt. (Vielleicht gibt Windows sowas schon gar nicht her). Hätte ja sein können das es eine art einstellung gibt: Automatisch auf alle vom Programm erzeugten Prozesse Attachen. Oder ich kann eine exe vorgeben und der debugger attached automatich auf alle Prozesse dieser exe datei.
-
Hi,
Ich nehme an der managed code ruft bei Dir eine DLL auf die auch managed ist.Meine idee währe eine native (unmanaged) dll aufzurufen die einen HW breakpoint
hat. Wird dieser aufgerufen so wird der exception handler von windoof ne msg raushauen. Dann könntest Du dich im Debugmodus "mixed" (gemischt) daran anheften.Schneller gehts mit nen Sleep in deinem Source, 12000 ms sollten reichen.
Oder ne konditionierte Schleife á laDWORD bDone=0; while(!bDone) { Sleep(10); }
Den inhalt von bDone könnteste beim einhängen einfach ändern, so das du step-wise
die schritte im fremdcode verfolgen könntest.zwar alles ein bissl umständlich, aber sollte funktionieren.
grüüüße
-
DebugBreak()
http://msdn.microsoft.com/en-us/library/ms679297(v=vs.85).aspxoder
DebugBreakProcess(..)
http://msdn.microsoft.com/en-us/library/ms679298(v=vs.85).aspx
-
---
edit egal