Ich habe ein .NET-Programm, das aus bestimmten Gründen nicht in Visual Studio ausgeführt werden kann (Excel-Datei, die aus einem Excel 2010-Vorlagenprojekt erstellt wurde), für das ich Startereignisse debuggen muss.
Wenn ich Ereignisse debuggen möchte, die nach der Programminitialisierung auftreten, gibt es kein Problem. Ich führe das Programm über den Explorer aus, hänge den Prozess an Visual Studio an und füge dem Code einige Haltepunkte hinzu. Aber hier muss ich Haltepunkte für die Startereignisse setzen. Ich muss in der Lage sein, Prozesse an Visual Studio anzuhängen, nicht abhängig von einer PID, sondern von einem bestimmten Prozessnamen oder einer anderen Lösung, die funktionieren würde.
Das Hinzufügen eines Thread.Sleep(1000)
in meinen Startereignissen, um mir Zeit zu geben, den Prozess in Visual Studio anzuhängen, kommt natürlich nicht in Frage!
quelle
Ich habe ein C ++ - Plugin in einem extern erzeugten Prozess debuggt, der beim Auslösen einer Ausnahme beim Start abgestürzt ist, und dies hat perfekt für mich funktioniert:
Fügen Sie die kostenlose Reattach-Erweiterung für Visual Studio hinzu . Bitten Sie ihn, den Prozessnamen erneut zu verknüpfen, bevor er gestartet wird. Es wird ein modaler Dialog angezeigt, der darauf hinweist, dass auf den Start des Prozessnamens gewartet wird.
Starten Sie nun den Prozess und der Visual Studio-Debugger wird sofort angehängt, wobei Ausnahmen abgefangen und Haltepunkte erreicht werden.
quelle
Führen Sie die folgenden Schritte aus, wenn Sie über Visual Studio 2017-2019 verfügen:
Viel einfacher als andere Vorschläge: Sie müssen sich nicht mit den Projekteigenschaften herumschlagen, und es sind keine Erweiterungen erforderlich.
quelle
Ich fand diese Antwort, als ich nach etwas Ähnlichem suchte. In meinem Fall konnte ich die ausführbare Datei nicht einfach als Startprogramm für mein Projekt verwenden, da sie in einer sehr spezifischen Umgebung gestartet werden musste, die ich nicht einfach reproduzieren konnte (namentlich: von cygwin gestartet).
Ich habe mir die von mrstrange vorgeschlagene Reattach-Erweiterung und auch die sehr ähnliche Attach To Anything- Erweiterung angesehen ... aber meine ausführbare Datei schien zu schnell zu schließen, als dass die Erweiterungen benachrichtigt und angehängt werden könnten .
Was mir schließlich geholfen hat, war Folgendes : https://stackoverflow.com/a/4042545/1560865 , das auf den MSDN-Artikel verweist. Gewusst wie: Starten Sie den Debugger automatisch , in dem wiederum die folgenden Schritte aufgeführt sind:
a. Klicken Sie mit der rechten Maustaste auf den Ordner Ausführungsoptionen für Bilddateien , und klicken Sie im Kontextmenü auf Neuer Schlüssel .
b. Klicken Sie mit der rechten Maustaste auf die neue Taste, und klicken Sie im Kontextmenü auf Umbenennen . c. Bearbeiten Sie den Schlüsselnamen in den Namen Ihrer Anwendung. in diesem Beispiel myapp.exe .
debugger
.vsjitdebugger.exe
.a. Öffnen Sie die Systemsteuerung in der klassischen Ansicht und doppelklicken Sie auf System .
b. Klicken Sie auf Erweiterte Systemeinstellungen .
c. In den Systemeigenschaften , klicken Sie auf die erweiterte Registerkarte.
d. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariablen .
e. In der Umgebungsvariablen Feld Dialog unter Systemvariablen , wählen Sie Pfad , klicken Sie auf die Bearbeiten - Taste.
f. In der Systemvariablen bearbeitenFügen Sie im Dialogfeld das Verzeichnis zum Feld Variablenwert hinzu . Verwenden Sie ein Semikolon, um es von anderen Einträgen in der Liste zu trennen.
G. Klicken Sie auf OK , um das Dialogfeld Systemvariable bearbeiten zu schließen .
h. Klicken Sie auf OK , um das Dialogfeld Umgebungsvariablen zu schließen.
ich. Klicken Sie auf OK , um das Dialogfeld Systemeigenschaften zu schließen.
Hoffe, dass dies in Zukunft allen anderen hilft!
quelle
Wenn es keinen Prozess ist dann Visual Studio kann nicht anhängen zu.
Sie können das Startprogramm Ihres Projekts jedoch so einstellen, dass es nicht die Ausgabe Ihres Projekts ist.
quelle
Sie können eine MessageBox anzeigen. Dies würde die Anwendung blockieren. Anschließend hängen Sie den Debugger an den Prozess an oder fügen ihn erneut hinzu und klicken auf OK, um fortzufahren:
Sie können es dem Formularkonstruktor hinzufügen (wenn Sie Winforms verwenden), sodass dies vor allem anderen ausgeführt wird, mit Ausnahme der Initialisierung von Komponenten:
Wenn Sie das Debuggen beendet haben, kommentieren Sie diese Zeile aus.
quelle
Sie können den Debugger über Ihren Code über starten
Entfernen Sie diese Zeile jedoch nicht, bevor Sie Ihre Anwendung versenden. Vielleicht möchten Sie Compiler-Flags verwenden, um sicherzugehen:
quelle
Eine kleine Lösung, die vielen Menschen passen könnte.
Fügen Sie in der ersten Codezeile, die die Exe ausführen wird, diesen Befehl hinzu
System.Threading.Thread.Sleep (20000)
Dadurch schläft die Exe 20 Sekunden lang, bevor sie mit der Verarbeitung beginnt. Dann haben Sie 20 Sekunden Zeit, um eine Verbindung zum Prozess herzustellen. Dies kann schnell mit Strg + Alt + P erfolgen. Suchen Sie dann den Prozess und geben Sie ihn ein, um ihn anzuhängen.
Keine gute Antwort, aber für mich ein Vergnügen: -)
quelle