Ich möchte eine Verbindung zu einem Prozess (a.exe) herstellen, sobald dieser erzeugt wird. Ist dies mit VS möglich? Ich kenne nur den Namen des Prozesses. Eigentlich möchte ich einen Haltepunkt im C # -Code setzen, aber der Code gehört zu einer anderen ausführbaren Datei, die von der aktuell ausgeführten Anwendung (c.exe) gestartet wird. Der Code befindet sich innerhalb des Initialisierungszeitraums, sodass ich das Anhängen nicht manuell durchführen kann.
c#
visual-studio
debugging
Bin Chen
quelle
quelle
Antworten:
Als ich zuvor mit dieser Situation konfrontiert war (und beide Prozesse kontrollierte), stellte ich fest, dass eine anständige Problemumgehung darin besteht, Debugger.Launch () im Einstiegspunkt des Laichprozesses aufzurufen . VS öffnet dann ein Dialogfeld und lässt Sie an den Prozess anhängen.
quelle
Weitere Informationen finden Sie im MSDN-Artikel unter Gewusst wie: Automatisches Starten des Debuggers. Auf diese Weise können Sie die Vielzahl von Dialogfeldern zum Klicken auf Bestätigungen überspringen, ohne die Benutzerkontensteuerung oder andere Probleme zu deaktivieren. Der Artikel listet die folgenden Schritte auf:
quelle
Ich habe nach einer Möglichkeit gesucht, dies zu tun, wenn ich eine Konsolenanwendung innerhalb eines Abnahmetests starte.
Ich habe das heute gefunden - https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/
Es ist ein Add-On zum Visual Studio und ein Genuss. Wenn ich einen Abnahmetest debugge (ich verwende Resharper Test Runner) und einen Haltepunkt in der App platziere, die gestartet wird, kann ich die App jetzt in derselben Visual Studio-Instanz debuggen.
quelle
Eine weitere gute Lösung ist die Verwendung der Visual Studio-Erweiterung "ReAttach". Kann hier gefunden werden .
Wenn Ihr Prozess derzeit nicht ausgeführt wird, werden Sie von ReAttach aufgefordert, ihn zu starten und anzuhängen, sobald er verfügbar ist.
quelle
"Entrian Attach" ist ein Visual Studio-Add-In, das genau dies tut. Sie geben den Namen Ihrer ausführbaren Datei an und hängen den Debugger an, wenn der Prozess gestartet wird, unabhängig davon, wie er gestartet wurde, bevor Code ausgeführt wurde.
(Offenlegung: Ich bin der Autor. Ich habe Attach erstellt, weil ich dieses Problem ständig habe!)
quelle
Sie können auch das Dienstprogramm gflags.exe verwenden, das mit den Windows-Debugging-Tools geliefert wird. Sie müssen lediglich gflags.exe öffnen, dann zur Bilddatei gehen, den Prozessnamen (a.exe) eingeben, die Tabulatortaste drücken und das Kontrollkästchen Debugger in der Textbox aktivieren Geben Sie den vs-Pfad mit der Option / debugexe ein (dh "C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe" / debugexe).
Das automatisch visuelle Studio wird geöffnet, sobald der Prozess ausgeführt wird. Sie können Ihre Haltepunkte hinzufügen und auf Ausführen klicken.
quelle
Wie wäre es damit: Öffnen Sie das Projekt für
a.exe
in VS, legen Sie die Haltepunkte usw. fest. Öffnen Sie dann die Projekteigenschaften für a.exe, Registerkarte Debugging , und setzen Sie den Befehl aufc.exe
. Dann drücken Sie einfach Debug .Leider habe ich das bei verwalteten Projekten nie gemacht, so dass ich hier daneben liegen kann. So würde ich es jedoch mit nicht verwalteten (C ++) Projekten machen. Ich denke, Managed Debugger sollte es auch unterstützen.
quelle
Wenn C # -Code von nicht verwaltetem Code gestartet wird, stellen Sie sicher, dass Sie "Debugging von nicht verwaltetem Code" unter @Project-Eigenschaften -> Debug-Optionen aktivieren.
quelle
Ich mochte Entrian Attach wirklich, wie von @RichieHindle vorgeschlagen, aber ich fand auch dieses kostenlose Tool, das etwas Ähnliches tut. Es fängt alle Prozesse ab, die vom Debugging-Prozess gestartet wurden.
Spawned Process Catcher: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher
quelle
Ab VS 2013 SP2 gibt es ein kostenloses Tool von Microsoft, das dasselbe tut wie der zuvor erwähnte "Spawned Process Catcher" - das Anhängen aller Prozesse, die von einem Prozess gestartet werden, der sich bereits im Debugging befindet. Hinweis: Ich habe dies nur mit nicht verwaltetem C ++ getestet (dies funktioniert einwandfrei).
Microsoft Child Process Debugging Power Tool
MSDN-Blogeintrag
quelle