Home Nach oben Multiling. Programme Remote Debugging

HOWTO: Remote Debugging für Dummies

Kleine Begriffserklärung:

In meiner Installation sieht das so aus:

Grundvoraussetzungen:

  1. Host und Target haben bei Netzwerkkarten und TCP/IP ist installiert.
  2. Die IP Adresse oder der Hostname des Targets ist bekannt.
  3. Auf dem Target wird ein Verzeichnis angelegt in dem die folgenden Dateien liegen:
    MSVCMON.EXE, MSVCRT.DLL, TLN0T.DLL, DM.DLL, MSVCP6O.DLL, MSDIS110.DLL

Bei einem NT Rechner kommt zusätzlich noch die PSAPI.DLL dazu (wenn nicht sowieso schon vorhanden). Die MSVCRT.DLL sollte man ins SYSTEM/SYSTEM32 Verzeichnis kopieren, jedoch ist diese Datei meistens sowieso schon vorhanden. Nach meinen Infos ist der Remotedebugger auf keine spezielle (neuere) Version der MSVCRT.DLL angewiesen. Ich belasse die Datei meistens nur im Verzeichnis in dem auch die anderen Dateien liegen. Am besten erzeugt man sich eine Diskette mit den entsprechenden Dateien (ja es geht alles auf EINE Diskette) und die hat man immer griffbereit.

Vorgehensweise:

  1. Idealerweise gibt man auf dem Testrechner selbst oder auf einem Server im Netzwerk einen Bereich frei, auf dem sowohl Host, als auch Target Zugriff haben. Dieses Verzeichnis kann das normale Installationsverzeichnis sein in dem die gesamte Programmumgebung installiert ist.
  2. Auf dem Host wird im DevStudio unter "Build->Debugger Remote Connection". Statt "Local", "TCP/IP" ausgewählt. Nicht vergessen unter Settings den Hostnamen oder die IP Adresse des Zielrechners anzugeben.
  3. Im Bereich "Project Settings->Debug->General" wird unter "Remote executable path and file name" Das Zielverzeichnis mit dem kompletten Namen des Programmes angegeben. Alle anderen Einträge dieser Seite bleiben wie man es eben haben möchte.
  4. Im Bereich "Project Settings->Post-build step" wird die folgende Befehlszeile eingefügt:
    copy $(TargetPath) $(RemoteTargetPath)
    Durch diesen kleinen Trick wird nach jedem Link Vorgang die EXE Datei sofort auch im Debug Ziel aktualisiert.
    Allerdings erfordert dies, dass das zu testende Programm von Host und Target gesehen auf dem selben Laufwerk liegt. Entweder man verwendet einen UNC Pfad oder ein identisches Laufwerks-Mapping. In meiner Installation liegt immer alles unter einem speziellen Ordner auf dem Server (Y:\Projekt\ZuTestendesProgramm\Programm.exe). 
  5. MSVCMON.EXE auf dem Target-Rechner starten und "Connect" auswählen. Die "Settings" haben keine Bedeutung (oder ich habe deren Bedeutung nicht begriffen).
  6. Und mit einem Go (F5) kann es los gehen.
  7. Beim ersten ersten Start der Debug Session versucht der Debugger auch für DLL's die geladen werden die Symbol-Tabellen des Targetsystem mit denen des Hostrechners zu synchronisieren, das geht natürlich nur wenn die vorhanden oder eben identisch sind, also bei gleichem OS. Für eigene DLL's kann dies aber ohne Probleme gleich mit geschehen. Man kann diese nervige Abfrage aber auch gleich Abbrechen nachdem man den kleinen Schalter "Try to locate other DLL's" ausgeschaltet hat.
    Evtl. DLL's die unbedingt in den Debug Vorgang eingeschlossen werden sollen, lassen sich unter dem Karteireiter "Project Settings->Debug->Addiontal DLL's" korrigieren oder vorgeben.
  8. Die Exe Datei wird wie von Geisterhand auf dem Target-System mit der Angabe der Programmparameter gestartet und man kann nun Debuggen wie man es gewohnt ist. Alle Funktionen wie Stacktrace, Register, Watch-Window stehen uneingeschränkt zur Verfügung.

Vorteile:

Schmerzlich vermisst wird:

Tips:

Weitere Infos:

MSDN Library - January 2001
  Visual Studio 6.0 Documentation
    Visual C++ Documentation
      Using Visual C++
        Visual C++ Programmer's Guide
          Debugging
            Debugging Specific Types of Applications
              Debugging Remote Applications

Ich hoffe nichts vergessen zu haben. Wenn ja einfach ein kurzes Feedback und ich werde den Artikel anpassen.

Martin Richter