2009-02-19 18 views
8

Ich versuche WinDBG oder einen anderen Debugger zu verwenden, um eine CodeGear Delphi 2007 Windows-Anwendung auf einem Remotecomputer zu debuggen. Ich konnte keine Symboldateien für WinDBG erstellen.Debuggen von Delphi-Anwendung auf Nicht-Entwicklungsumgebung

Gibt es eine Möglichkeit, WinDBG oder einen anderen Debugger zu verwenden, um Delphi-Anwendungen auf einem System zu debuggen, das die IDE nicht enthält?

Edit1

Der Remote-Debugger ist nicht hier Option. Ich bin in der Lage, in den Endbenutzer-PC zu remote, aber ich kann den Remote-Debugger aufgrund Firewall-Einschränkungen nicht verwenden.

EDIT2

Ich bin in der Lage zu entfernt sie an die Maschine, kann aber den CodeGear Remote-Debugger aufgrund Firewall-Einschränkungen nicht anschließen.

Antwort

0

Vielen Dank für die tollen Vorschläge und interessanten Produkte.

dieses spezielle Problem zu lösen, ist die „beste“ Art, wie ich verwendet den Output im Windows- Namespace gefunden. Dies, zusammen mit Debug View from Sysinternals, wird mir erlauben, Debug-Informationen zu sammeln und ziemlich schnell zu sortieren.

Wenn Sie diese Methode verwenden möchten, stellen Sie sicher, dass alles in ANSI-Formatierung verpackt ist. IE:

OutputDebugString(PAnsiChar(string1 + string2)); 

Dies stellt sicher, dass Zeichenfolge1 und Zeichenfolge2 kombiniert und dann in ANSI-Zeichen konvertiert werden.

Ich hätte wahrscheinlich gerade begonnen, Text in eine Datei für etwas schnell und schmutzig zu dumpen, aber dies ermöglicht eine nicht-Debugging-Version Debugging-Meldungen ausgeben.

+0

Ich möchte diese Frage für ein paar Tage offen lassen, um zu sehen, ob wir keine bessere Antwort erhalten, als den eigentlichen Debugger zu verbinden. –

5

Wie wäre es mit dem Remote-Debugger? Erstellen Sie Ihre App mit Remote-Debug-Symbolen und debuggen Sie von Ihrem Entwicklungscomputer über das Netzwerk.

+0

Ich würde gerne in der Lage sein, dies zu tun, aber bedauernd die andere Maschine ist auf ein ganz anderes Netzwerk mit Firewall-Einschränkungen. –

+0

Ich konnte in den PC remote, aber ich kann den Remote Debugger nicht über TCP \ IP verbinden. Ich habe etwas Ähnliches wie WinDBG gesucht, um die Anwendung über die GUI zu beheben, da ich den Debugger nicht direkt verbinden kann. –

+0

Wenn Sie nicht aus der Ferne verbinden können, dann mag ich die Idee von X-Ray. madExcept Felsen. –

1

In Delphi können Sie Run -> Attach to Process verwenden, wählen Sie den Remote-Computer und wählen Sie den Prozess, den Sie debuggen möchten.

+0

... vorausgesetzt, dass der Zielcomputer den Remote-Debugger ausführt. – dummzeuch

+0

Ich habe dieses "Verfahren" nie benutzt, also habe ich nicht darüber nachgedacht. Um es richtig zu stellen, habe ich zumindest "Ich" etwas gelernt. –

5

stattdessen, ich verlasse mich auf MadExcept Stack Tracing und einige Protokollierungsfunktionen. Meine Anwendung ist weltweit verteilt & das hat ausgereicht.

+0

Ich habe dieses Produkt ein wenig mehr angeschaut und ich bin ziemlich beeindruckt von dem, was es kann! Bedauerlicherweise stürzt die Anwendung nicht ab. Ich brauche einen Weg, um den Speicher zu entladen oder die Anwendung laufen zu lassen, um einen logischen Fehler zu finden. Danke für das interessante Produkt! –

4

können Sie versuchen, eine Map-Datei zu erzeugen und es dann zu einer DBG-Datei von http://code.google.com/p/map2dbg/

mit map2dbg konvertieren Dann können Sie die DBG-Datei in WinDbg laden.

Haftungsausschluss: Ich hatte ein ähnliches Problem, aber ich konnte Remote-Debugging durchführen und musste das alles nicht tun. Ich bin mir also nicht sicher, ob das funktioniert. Aber wenn Sie es versuchen, lassen Sie es uns wissen, wenn es funktioniert.

+0

Ich habe mich gestern schon ein wenig umgeschaut und festgestellt, dass es noch nicht mit Delphi kompatibel ist. Wenn Sie mehr Informationen darüber haben, wäre das perfekt. –

2

ich fürchte, das ist mehr von denen Antworten „Ich habe nicht eine tatsächliche Antwort hat“, aber es Macht nur helfen ...

Haben Sie darüber nachgedacht Protokollierung zu Ihrer Anwendung hinzufügen? Ich habe große Dinge über SmartInspect gehört. Mit ihm können Sie alle Arten von Informationen protokollieren, einschließlich Stack-Traces und "Watches" (Variablen).

Ein anderes Protokollierungsprodukt für Delphi ist EurekaLog.

+0

Ich kann bestätigen, dass SmartInspect eine sehr zuverlässige Lösung ist. Ok, du kannst nicht debuggen damit das Logging ist sehr gut und fortgeschritten. –

0

http://sourceforge.net/projects/tds2dbg/ kann verwendet werden, um Delphi TDS Debug-Dateien in DBG-Dateien zu konvertieren. Dies gibt grundlegende Symbolinformationen - Funktionen, Klassen, Einheiten, aber keine Variablen. Genug für einen vernünftigen Aufruf-Stack und mit ein wenig Wissen genug, um Delphi-Apps live und mit Dumps zu debuggen.

Ich habe über einige Delphi + WinDBG Erfahrungen auf meinem Blog geschrieben: https://marc.durdin.net/2015/11/windbg-and-delphi-a-collection-of-posts/