Marko Apfel - Afghanistan/Belgium/Germany

Management, Architecture, Programming, QA, Coach, GIS, EAI

  Home  |   Contact  |   Syndication    |   Login
  187 Posts | 2 Stories | 201 Comments | 4 Trackbacks

News



Twitter | LinkedIn | Xing

Archives

Post Categories

BizTalk

C#

Enterprise Library

SAP

SQL Server

Technologie

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).

posted on Tuesday, April 27, 2010 9:38 AM

Feedback

# Debugging nicht möglich 9/9/2010 11:37 AM Studiol
Bei mir sind die Breakpoints auch nicht ausgefüllt und haben ein gelbes Warndreieck. Ich habe jedoch in den Projekt-Eigenschaften unter "Erstellen" "Code Optimieren" nicht angeklickt.
Ich nutze VS 2010 Premium auf dem anderen Rechner ist das aus dem VS Verzeichnis herauskopierte Remote Debugging Programm ausgeführt (msvsmon.exe) und alles so eingestellt wie beschrieben.
Nachdem ich eine Verbindung über TCP/IP auf einen bestimmten Port festgelegt habe, finde ich dann auch mit VS den gestarteten zu debuggenden Prozess.
Wieso wird das Programm trotzdem nicht gedebugt?
danke für die Antwort

# re: Remote Debugging mit Visual Studio 10/20/2010 11:52 AM Marko Apfel
Das kann ich dir leider nicht sagen - für eine Ferndiagnose ist die Problemdomäne etwas zu groß & der Input zu klein ..
Aber hakelige Effekte gibt es in diesem Kontext einige - und manchmal hab ich den Eindruck, dass sie auch nichtdeterministisch sind ;-))
Viel Glück, Marko

# re: Remote Debugging mit Visual Studio 11/19/2010 2:43 PM kurt
der da oben meint vermutlich: das problem ist, es wurde keine pdb geladen.
wie man manuell eine pdb nachlädt, dazu steht bei ms nur - rechtsclick im fenster module.
nur welches fenster mit module wirklich gemeint ist, ??? - ich habe es nicht gefunden. der projektmappen explorer ist es nicht.
kurt

# re: Remote Debugging mit Visual Studio 11/19/2010 3:37 PM kurt
habe nun das fenster module unter
Debuggen/Fenster/Module (Ctrl+D;M) gefunden.

RechtsClick - Symbole laden aus/Symbolpfad/ und
staunen wenn die Meldung kommt:
"Dieser Ordner enthält keine passende Symboldatei"
obwohl die gerade erstellte .pdb ausgewählt wurde.

kurt

Post A Comment
Title:
Name:
Email:
Comment:
Verification: