Remote Debugging mit Visual Studio
Das Debuggen einer Applikation auf einem Rechner ohne installiertes Visual Studio gestaltet sich mit dem Remote Debugging Monitor relativ einfach. Derartige...
Das Debuggen einer Applikation auf einem Rechner ohne installiertes Visual Studio gestaltet sich mit dem Remote Debugging Monitor relativ einfach.
Derartige Konstellationen ergeben sich insbesondere dann, wenn ein Debugging von Anwendungen in Produktiv-Umgebungen notwendig wird.
Die Maschine mit der Anwendung wird dann als Remote-Maschine bezeichnet und die, von der aus das Debugging gesteuert wird, als Debugging-Host.
Anwendungsseitiges Vorbereiten der Remote-Maschine
Eine Grundvorraussetzung zum Debuggen sind die Programmdatenbank-Dateien (*.pdb) welche beim Kompilieren neben den eigentlichen DLLs erzeugt werden. Sie enthalten die Debug- und Projektzustandsinformationen und bilden quasi die Verbindung von ausgeführten Code zur entsprechenden Sourcecode-Zeile.
Unter den Projektoptionen ist übrigens darauf zu achten, dass die Optimierung deaktiviert ist. Andernfalls gibt es Brüche in dieser Verbindung.
Nun kann der Host-Prozess für die DLL oder die Applikation selbst gestartet werden.
Remote Debugging Monitor auf der Remote-Maschine starten
Dieses Tool findet man entweder auf den Installationsmedien zu Visual Studio oder schon ausgepackt unter ..\Microsoft Visual Studio X\Common7\IDE\Remote Debugger
Man kopiert den Ordner der entsprechenden Platform auf die Remote Maschine und startet den Remote Debugging Monitor (msvsmon.exe). Der erste Start sollte als User mit administrativen Berechtigungen ausgeführt werden da bestimmte Ports der Firewall erst noch geöffnet werden müssen und dies unter eingeschränkten Rechten natürlich nicht möglich ist. Dazu kann man z.B. “run as” verwenden.
Folgender Dialog zeigt die entsprechende Warnung mit der Möglichkeit die benötigten Einstellungen vornehmen zu lassen:

Die mittlere Auswahl für den zu erlaubenden Scope (Bereich) sollte im eigenen Netz bei gleichem Subnetz ausreichend sein – andernfalls ist die dritte Auswahl richtig.
Darüberhinaus kann man natürlich die Berechtigungen auch ganz individuell über die Liste der Programme mit ihren Ports bis hinab auf erlaubte IP-Adressen-Level setzen.
Die geänderte Firewall-Konfiguration lässt sich in den Ausnahmen der Firewall-Konfiguration verifizieren. Start > Control Panel > Windows Firewall
Dort sollten nun zusätzlich die vier rot markierten Ports aufgeführt sein:

Nach diesem ersten Start kann der Remote Debugging Monitor geschlossen werden und als “nomaler” User neugestartet werden. (Anmerkung: Dies sollte derselbe User sein unter dem das Visual Studio auf dem Entwicklungsrechner laufen soll.)
Ein erfolgreiches Starten quittert der Monitor mit:

Die dort angegebenen Daten werden später für die Verbindung von Visual Studio aus benötigt.
Zum Kopieren der Verbindungsdaten in die Zwischenablage lässt sich einfach über Tools > Options ein Dialog öffnen in welchem man Zugriff auf den Namen hat.
Debuggen auf dem Debugging-Host
Auf dem Debugging-Host startet man nun Visual Studio und lädt das entsprechende Projekt.
Über Debug > Attach to Process… öffnet sich der Dialog zum Anhängen auf Prozesse. Neben der eigenen Maschine kann man in der zweiten Zeile eine entfernte Maschine angeben.
Hier trägt man die oben genannten Verbindungsdaten ein. Nach kurzer Wartezeit sollte sich die Liste der zum Debugging verfügbaren Prozesse füllen:

Per Doppelklick hängt man sich nun auf den Prozess und Visual Studio erlaubt das Debuggen wie man es vom “normalen” Entwickeln her kennt.
Mittels Debug > Detach All beendet man das Remote-Debuggen.
Beim ersten Start wird möglicherweise wie oben schon beschrieben auch auf dem Debugging-Host ein Öffnen bestimmter Firewall-Ports nötig. Dazu kann man entweder wie oben beschrieben den Remote Debugging Monitor oder Visual Studio selbst als User mit administrativen Berechtigungen ausführen.
Troubleshooting
In der Praxis treten doch hin und wieder Verbindungs- und Debugprobleme auf – typisch sind die folgenden:
Keine Verbindung zwischen Debugging-Host und Remote-Maschine etablierbar
__Fehler:__Es werden keine Prozesse der Remote-Maschine angezeigt. Lösungsvorschlag: Verfizieren, dass die Verbindungsinformationen zur Remote-Maschine vollständig sind – inklusive der User-Qualifizierung. Also: <Domäne><User>@<Maschine>
Fehler: Beim Spezifizieren der Remote-Maschine kommt folgende Fehlermeldung: Unable to connect to Microsoft Visual Studio Remote Debugging Monitor named ‘XYZ’. The Microsoft Visual Studio Remote Debugging Monitor has been closed on the remote machine. Lösungsvorschlag: Firewalls auf dem Debugging-Host und der Remote-Maschine mal ganz deaktivieren. In einigen Fällen hat auch das erneute Probieren ein paar Sekunden später zum Erfolg geführt.
Kein Verbinden zu einem Prozess möglich
Fehler: Nach Auswahl eines Remote-Prozesses kommt folgende Fehlermeldung: Unable to attach to the process. The Microsoft Visual Studio Remote Debugging Monitor has been closed on the remote machine
Debugging nicht möglich
Fehler: Ein Breakpoint wird nur als roter unausgefüllter Kreis mit einem gelben Warndreieck angezeigt. Lösungsvorschlag: In den Projekt-Optionen verifizieren, dass beim Kompilieren keine Code-Optimierung aktiviert ist (wie es z.B. in der Release-Konfiguration standardmäßig der Fall ist).