11 Stimmen

Gibt es eine Möglichkeit, den Prozess im ausgesetzten Zustand zu starten?

Ich möchte einen Prozess im angehaltenen Zustand starten. Gibt es eine Möglichkeit, dies nur mit den Standardwerkzeugen von Windows XP zu tun? Gibt es irgendwelche leichtgewichtigen Tools von Drittanbietern?

Das Problem, das ich zu lösen versuche:
Ich habe eine Anwendung, die ich mit Hilfe von Visual Studio 2005 debuggen möchte. Ich habe einen Debug-Build mit den erforderlichen *.pdb-Dateien und ich habe alle Quellen von diesen *.pdb-Dateien referenziert. Ich möchte keine leere Lösung erstellen, die diese Anwendung für mich ausführt, also versuche ich, diesen Prozess anzuhängen, nachdem er von einem anderen Ort aus gestartet wurde. Ein Teil des Codes, den ich debuggen möchte, wird zu Beginn des Prozessstarts ausgeführt, so dass ich ihn im angehaltenen Modus ausführen, einen Debugger anhängen und ihn dann wieder aufnehmen möchte.

10voto

Michael Burr Punkte 320591

Ich bin nicht genau sicher, was Sie versuchen, von Ihrer Frage zu tun, aber vielleicht mit dem ntsd Debugger, die mit XP kommt wird Ihnen helfen, zu tun, was Sie wollen (standardmäßig wird ntsd den Prozess laden und bei der ersten Anweisung stoppen).


Anhand der aktualisierten Informationen in Ihrer Frage würde ich vorschlagen, dass Sie die Debugging-Tools für Windows-Paket von Microsoft und das Debuggen der Startsoftware in WinDbg - es gibt einige Dinge, die Visual Studio besser kann, aber es gibt auch einige Dinge, die WinDbg besser kann als Visual Studio (WinDBg ist ein sehr leistungsstarker Debugger).

Sie können das Programm auch einfach über die Befehlszeile in den Visual Studio-Debugger laden (ohne eine Lösung):

devenv /debugexe yourprog.exe <arguments>

9voto

sharptooth Punkte 162790

Sie können ganz einfach eine Anwendung schreiben, die diese Aufgabe für Sie übernimmt. Verwenden Sie die Funktion CreateProcess(), setzen Sie das Flag CREATE_SUSPENDED in der dwCreationFlags Parameter.

Für Ihre spezielle Aufgabe könnte die Anwendung Folgendes tun: CreateProcess() aufrufen, um die Anwendung zu starten und den Fehlercode zu überprüfen, dann MessageBox() aufrufen, um Ihnen mitzuteilen, dass der Debugger angehängt werden soll, und dann, nachdem Sie eine Schaltfläche auf dem Meldungsfeld gedrückt haben (MessageBox() kehrt zurück), ResumeThread() aufrufen, um die Anwendung wieder aufzunehmen.

6voto

HairOfTheDog Punkte 2133

Ich stelle mir diese Frage schon seit einiger Zeit und habe gerade dieses hübsche kleine Tool gefunden, das genau das tut, was Sie (und ich) wollen. Sie können nur die Binärdatei oder auch den Quellcode erhalten.

http://www.codeproject.com/Articles/230005/Launch-a-process-suspended

1voto

William Leara Punkte 10417

In Bezug auf leichtgewichtige Tools von Drittanbietern:

SysInternals Process Explorer:
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

ermöglicht es Ihnen, Prozesse anzuhalten und fortzusetzen. Es kann sie nicht "starten", aber für Ihren Zweck kann es trotzdem nützlich sein. Es ist ein kostenloser Download.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X