web-dev-qa-db-de.com

Debugging: Zum Anhängen an Process für Console App, die in cmd.exe ausgeführt wird

Wie stellen Sie "Attach to Process ..." für eine Konsolenanwendung dar, die in einem CMD-Fenster ausgeführt wird und nicht von F5 gestartet wird? Der Grund, warum ich frage, ist, dass die Anwendung Befehlszeilenargumente verwendet und ich eine echte Erfahrung haben möchte.

Ich habe sogar an CMD.exe angehängt, aber kein Glück, oder das Setzen eines Haltepunkts mit Console.ReadKey(), auch ohne Glück. Ich bin irgendwie ratlos hier.

Ist das möglich?

26
Chris

Sie haben einige Möglichkeiten:

  • Verwenden Sie die Option "Debug -> Befehlszeilenargumente" in Visual Studio.
  • Verwenden Sie "Debuggen -> An Prozess anhängen" und finden Sie Ihren Prozess. Es ist nicht cmd.exe, sondern ein Prozess mit dem Namen der ausführbaren Datei wie "MyProject.exe". Sie können Process Explorer oder einen anderen Task-Manager mit Unterstützung für die Strukturansicht verwenden, um die Prozess-ID leicht zu finden. Suchen Sie einfach nach den Prozessen, die von cmd.exe gestartet werden.
  • Fügen Sie Debugger.Break () in Ihren Code ein. Wenn diese Methode ausgeführt wird, startet das System ein Dialogfeld, in dem Sie gefragt werden, welche Instanz von Visual Studio zum Debuggen verwendet werden soll (Sie können die Instanz auswählen, in der Ihr Projekt bereits geöffnet ist).
30
VladV

So debuggen Sie von der Befehlszeile aus, anstatt das VS GUI-Labyrinth zu verwenden:

  • Starten Sie die Visual Studio-Eingabeaufforderung

  • typ vsjitdebugger /? das gibt Ihnen das Befehlsbeispiel wie: 

c:> vsjitdebugger [AppName] [Args]: Starten Sie die angegebene ausführbare Datei und hängen Sie sie an den Debugger an

  • wenn Sie tlist oder tasklist eingeben, erhalten Sie PIDs zum Anhängen an vorhandene Prozesse. Beispiel: 

c:> tasklist | find/i "web"

5
Kwame

Es ist möglich, sicher. Versuchen Sie eine dieser beiden:

  1. Starten Sie den Prozess, gehen Sie zu Debug-> Attach und suchen Sie den Prozess. Möglicherweise müssen Sie eine Aktualisierung durchführen, um es anzuzeigen.
  2. Fügen Sie, falls möglich, eine Anweisung "Debugger.Break ()" in den Code ein. das wird automatisch unterbrochen (aber entfernen Sie es oder umgeben Sie es mit Präprozessoranweisungen, damit es nicht in den Produktionscode gelangt).
2
roufamatic

Wie bereits erwähnt, können Sie die stratup-Befehlszeilenargumente innerhalb des Projekts angeben und einfach mit dem Debuggen in Visual Studio beginnen.

Wenn Sie immer noch eine Verbindung zur laufenden Anwendung herstellen möchten, müssen Sie den Debugger an MyApp.exe anhängen (wie die Anwendung auch heißt - das Exe, das in das Verzeichnis bin\debug kompiliert wird) und nicht cmd.exe. Beim Anhängen an cmd.exe wird es an den Befehlsprozess angehängt, nicht an den Prozess Ihrer Anwendung.

1
adrianbanks

In den Projekteinstellungen "Debug" finden Sie ein Textfeld für "Befehlszeilenargumente:". Wenn der VS-Debugger das C # -Programm startet, übergibt er diese Argumente an den Prozess, als ob das Programm von der Befehlszeile aus mit diesen Argumenten gestartet worden wäre.

Die Alternative ist die Verwendung eines Befehlszeilen-Debuggers. Hier gibt es ein paar Optionen, aber ehrlich gesagt sind sie wahrscheinlich nicht das, was Sie anstelle von VS verwenden möchten, es sei denn, Sie werden in wirklich haarige Debugging-Szenarien geraten. Wenn Sie daran interessiert sind, sie herauszufinden, gibt es eine gute Zusammenfassung in dieser SO Antwort:

Sie können auch die Technik ausprobieren, System.Diagnostics.Debugger.Break() zu einem frühen Zeitpunkt Ihrer Initialisierung aufzurufen. Wenn das Programm unter einem Debugger ausgeführt wird, wird es brechen. Wenn es nicht unter einem Debugger ausgeführt wird, sollten Sie gefragt werden, ob Sie eines hinzufügen möchten. Sie können den Aufruf abhängig von einer Konfigurationsdatei oder einer Umgebungsvariableneinstellung abhängig machen, sodass Sie die Pause nur dann erhalten, wenn Sie wirklich daran interessiert sind (etwas aufdringlich, aber nicht zu schlimm).

0
Michael Burr

Fügen Sie einfach einen Registrierungseintrag für den Namen Ihres Exes in "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file - Ausführungsoptionen" hinzu. Fügen Sie einen Debugger-Schlüssel mit dem Wert "vsjitdebugger.exe" darunter hinzu. Ein Dialogfenster erscheint Sie werden gebeten, eine VS-Version für das Debugging auszuwählen, wenn das Exe gestartet wird.

weitere Informationen finden Sie unter MSDN " Gewusst wie: Starten Sie den Debugger automatisch ".

0
kaige