Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Exception-Objekt in OnException auswerten

  Alt 2. Jul 2008, 21:31
Wenn du jetzt noch das zweite L einfügst, ist es richtig.

Zitat:
Allerdings - auch wenn ich mit Debug-Informationen übersetzen, bekomme ich keine anderen Informationen.
Das meinte ich auch nicht. Du könntest dann aber versuchen, zur Laufzeit die Debug-Informationen auszulesen und den Routinennamen zu finden. Dass das alles andere als trivial wäre, sollte trotzdem klar sein.

Du brauchst ohne Debug-Informationen aber auch nicht gleich die Flinte ins Korn zu schmeißen. Du könntest folgendermaßen vorgehen: Die Startadresse einer Funktion erhältst du mit dem @-Operator. Wenn du nun eine grobe Abschätzung der Code-Länge in Byte addierst, erhältst du die Adresse des Funktionenendes (falls du die Reihenfolge der Funktionen in der .pas-Datei kennst, ist es noch einfacher - dann liegt das Ende der Funktion nämlich kurz vor dem Anfang der nächsten). Falls du einen Verdacht hast, welche Funktion genau der Störenfried ist, ist das schon recht nützlich. Andernfalls kannst du deine Schätzung noch etwas gröber machen, um eine ganze Unit zu fassen - ich glaube, dass der Linker Funktionen einer Unit immer nahe zueinander ablegt.
Dann prüfst du einfach, ob die Fehleradresse im gesuchten Bereich ist, und siehst, ob die Exception direkt in einer der gesuchten Funktionen geworfen wurde. Das Problem mit den Hilfsroutinen bleibt natürlich.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat