Einzelnen Beitrag anzeigen

Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#1

Stacktrace - Unterschied bei "raise" oder "access violation"

  Alt 31. Okt 2018, 06:37
Halli Hallo,

In einem Programm wird mittels JCLDebug der Stacktrace aufgzeichnet wenn eine Exception auftritt. Eine gültige MAP-Datei ist vorhanden (in der Releaseversion integriert in das Programm). Die Stacktraces sind korrekt und listen die Fehlerstelle auf wie sie sollen. Die erzeugten Stacktraces haben auch jeweils eine ganze Reihe von Einträgen, so dass man schön sehen kann was das Programm bis zum Fehler ausgeführt hat.

Bein "normalen" Exceptions klappt das hervorragend. Mit "normal" meine ich Exceptions die im Quelltext mittels "raise" ausgelöst werden.

Wenn ich so etwas mache löst das natürlich eine Access violation aus (nur zum Test):

Delphi-Quellcode:
lTestObject := nil;
lTestObject.AddObject('Test', Self);
Das seltsame ist aber, dass in diesem Fall der Stacktrace nur aus genau einer Zeile besteht.

Ich hab dann mal ausprobiert die selbe Exception (Access violation) so auszulösen:

Delphi-Quellcode:
// jetzt mal manuell...
raise EAccessViolation.Create('Access violation manuell ausgelöst.');
In diesem Fall erhalte ich wieder einen korrekten Stacktrace, also einen mit einer Reihe von Einträgen an denen man den bisherigen Ausführungspfad bis zur Exception nachvollziehen kann.

Kann mir jemand den Unterschied zwischen einer geraiseten Excption und einer die durch einen echten Fehler entstand erklären?

Vielen Dank schon mal,
Ralf
Ralf Kaiser

Geändert von Ralf Kaiser (31. Okt 2018 um 07:02 Uhr)
  Mit Zitat antworten Zitat