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, Rolf
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:
Rolf
CenBells - Mi 10.08.05 15:37
BenBE 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ß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!