Entwickler-Ecke

Sonstiges (Delphi) - Delphi-MAP-Datei / Adresse von Laufzeitfehlern


Rolf_Geisler - Di 09.08.05 10:54
Titel: Delphi-MAP-Datei / Adresse von Laufzeitfehlern
Hallo,

habe da ein kleines Problem. In einer Anwendung taucht urplötzlich ein Laufzeitfehler auf, und Windows zieht in Windeseile viele kleine Fensterchen mit immer der gleichen Meldung auf, unter anderem der Fehleradresse.
Wie kommt man denn nun von dieser Adresse - wahrscheinlich über die MAP-Datei - zur Problemstelle im Quellcode?

Vielleicht hat jemand eine Idee ...

Danke, Rolfuser profile icon


rochus - Di 09.08.05 11:06

du kannst einen Addresshaltepunkt setzen (sieh OH), aber einfacher dürfte es sein, wenn du ungefährt weißt, wo der Fehler kommt, ihn reproduzierst und in der Schleife/Prozedur einen normalen Haltepunkt setzt und debuggst bis du ran kommst.

Gruß


Rolf_Geisler - Di 09.08.05 11:31

Danke für den Tip. Funktioniert aber leider nicht, da das Projekt auf einem Rechner weit weg beim Kunden läuft :( Den Quellcode habe ich dort nicht verfügbar ...
Ich habe wirklich nur Zugriff auf die von Windows gemeldete Fehleradresse und auf die MAP-Datei, die ich hier beim Compilieren habe erzeugen lassen.


rochus - Di 09.08.05 11:34

Hmm, sorry außer den Tipps fällt mir nur ein, eine Debuggerklasse zu schreiben, aber ich nehme an, das lässt sich für dich so schnell nicht realisieren.

Gruß


CenBells - Di 09.08.05 12:13

Hi,

für diesen Einsatzzweck gibt es fertige komponenten.
Unter anderem gibt es da MadExcept bei http://www.madshi.net und Eurekalog bei http://www.eurekalog.com.

Ich habe beide erfolgreich eingesetzt. Aktuell verwende ich Eurekalog, kann ich nur empfehlen.

Beide Tools fangen Fehler ab und erstellen eine Log-Datei mit einem Stacktrace und genauer Angabe von Unit, Methode und Zeile in der der Fehler aufgetreten ist.

Gruß
Ken


BenBE - Di 09.08.05 13:19

Wenn die Fehleradresse innerhalb diener Anwendung liegt, kannst Du das Programm unter Delphi stoppen und Suchen\Laufzeitfehler aufrufen um dort $Fehleradresse zu suchen. Wenn Du glück hast, öffnet Delphi Dir dann ne konkrete Fehlerzeile, ansonsten das CPU-Fenster. Dort kannst Du dann auf jeden Fall nen Haltepunkt setzen und über den Aufruf-Stack an eine brauchbare Position navigieren.

Debug-Tools a la MadExcept und EurekaLog sind zwar schön, helfen aber gerade nicht bei Anfängern den Umgang mit nem Debugger zu erlernen.


Rolf_Geisler - Di 09.08.05 15:57

Danke. EurekaLog sieht wirklich gut aus, die Trial-Version hat alle für den Test eingebauten Fehler gefunden und dokumentiert. Ist genau das, was ich gesucht habe. Ich hoffe, der Chef gibt das Geld für mich aus ... :wink:
Rolfuser profile icon


CenBells - Mi 10.08.05 15:37

user profile iconBenBE hat folgendes geschrieben:
Wenn die Fehleradresse innerhalb diener Anwendung liegt, kannst Du das Programm unter Delphi stoppen und Suchen\Laufzeitfehler aufrufen um dort $Fehleradresse zu suchen. Wenn Du glück hast, öffnet Delphi Dir dann ne konkrete Fehlerzeile, ansonsten das CPU-Fenster. Dort kannst Du dann auf jeden Fall nen Haltepunkt setzen und über den Aufruf-Stack an eine brauchbare Position navigieren.

Debug-Tools a la MadExcept und EurekaLog sind zwar schön, helfen aber gerade nicht bei Anfängern den Umgang mit nem Debugger zu erlernen.

Das Problem war in diesem Fall aber, daß kein Delphi zum Debuggen verwendet werden kann, da der Fehler nur beim Kunden auftrat. Und der hat kein Delphi :)


BenBE - Mi 10.08.05 15:47

Geht genauso ;-)

Anwendung in Delphi ausführen, Start\Programm anhalten --> Dann besagte Funktion aufrufen.

Wichtig ist nur, dass die Versionen der EXE-Datei von Delphi und beim Kunden identisch sind, sonst stimmen die Adressen nicht vollständig (oder auch gar nicht).


CenBells - Do 11.08.05 18:32

Oh, danke, habe ich gerade ausprobiert und mal wieder was dazugelernt :)

Gruß