Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception.StackTrace ? (https://www.delphipraxis.net/160520-exception-stacktrace.html)

himitsu 17. Mai 2011 12:03

Delphi-Version: XE

Exception.StackTrace ?
 
Seit einer Weile gibt es in allen Exception-Klassen theoretisch einen Stacktrace, welchen man auslesen könnte.
Nur leider hat irgendein "Idiot" vergessen diesen zu füllen.

Gut, wenn man sich das nun genauer ansieht, müßte man diesen drei Property erstmal was zuweisen, damit das dann auch nutzbar ist.
So ist das aber eine vollkommen nutzlose Funktion.
Delphi-Quellcode:
Exception = class(TObject)
public
class var
  // Hook this function to return an opaque data structure that contains stack information
  // for the given exception information record. This function will be called when the
  // exception is about to be raised or if this is an external exception such as an
  // Access Violation, called soon after the object is created.
  GetExceptionStackInfoProc: function (P: PExceptionRecord): Pointer;
  // This function is called to return a string representation of the above opaque
  // data structure
  GetStackInfoStringProc: function (Info: Pointer): string;
  // This function is called when the destructor is called to clean up any data associated
  // with the given opaque data structure.
  CleanUpStackInfoProc: procedure (Info: Pointer);
Nur wo bekommt man das her und warum hat Emba das nicht gleich mitgeliefert? :evil:

Ach ja, die vielen neuen Hilfethemen ala "This is xxx, a member of xxx.", welche in der OH nun drin sind, sind nicht hilfreich, dann das weiß ich auch alles so schon. :wall:
Zitat:

Zitat von http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_Exception_StackTrace.html
Pascal
Delphi-Quellcode:
property StackTrace: string;
.

Description
This is StackTrace, a member of class Exception.


SirThornberry 17. Mai 2011 12:15

AW: Exception.Stacktrace ?
 
Zitat:

Nur leider hat irgendein dämlicher Idiot vergessen diesen zu füllen.
Das ist nicht gerade die feine englische Ausdrucksweise. Vielleicht wurde das bewusst nicht gefüllt da es ein Großteil nicht nutzt und um Overhead zu vermeiden.
Wie sehen denn deine bisherigen Versuche aus dies zu nutzen?
(Vielleicht will/wollte man damit auch nur eine Schnittstelle für diverse Exception-Trace-System bereitstellen)

himitsu 17. Mai 2011 12:21

AW: Exception.Stacktrace ?
 
Du kannst das auslesen und bekommst einen Leer-String zurück. :lol:

In allen Komponenten (von Eurekalog bis Sonstewas) und allem was bei uns auf der Platte rumfleucht, ist jedenfalls nichts zu finden, welches dieses "Feature" nutzt, bzw. welches zuweisbare Funktionen für diese Property bereitstellt.
In Google bin ich noch auf Suche, aber bisher erfolglos.


Aber wenn man schon sowas einbaut und dieses nicht funktionstüchtig ist, weil noch etwas fehlt, dann wäre es schon gut, wenn man dafür den OH-Eintrag befüllt und dort sagt was wie wo man noch machen könnte.
Jemand mit 'nem Delphi Starter ist da voll am Arsch, weil in der OH absolut nix steht und ohne RTL-Sourcecodes kann man nichtmal nachsehn warum es nicht geht.

USchuster 17. Mai 2011 12:26

AW: Exception.Stacktrace ?
 
Zitat:

Zitat von himitsu (Beitrag 1101344)
Seit einer Weile gibt es in allen Exception-Klassen theoretisch einen Stacktrace, welchen man auslesen könnte.
[...]
Nur wo bekommt man das her und warum hat Emba das nicht gleich mitgeliefert?

Zu dem Thema gibt es einige Blog Einträge wie z.B. Working with Delphi’s new Exception.StackTrace

himitsu 17. Mai 2011 14:55

AW: Exception.StackTrace ?
 
Irgendwie funktioniert das nicht.

JclLastExceptStackList liefert keine Liste zurück und damit kann das JclLastExceptStackListToStrings in GetExceptionStackInfoProc auch keine StackListe liefern.

Die Map-Dateien und alle möglichen Debuginfos sind in den Projektoptionen aktiviert, sowie die Stackframes.

Panthrax 19. Mai 2011 22:35

AW: Exception.StackTrace ?
 
Tut mir leid, hab den Verweis von USchuster glatt übersehen...

Deep-Sea 20. Mai 2011 08:52

AW: Exception.StackTrace ?
 
@himitsu:
Hast du auch JclStartExceptionTracking aufgerufen?! :wink:

himitsu 20. Mai 2011 10:24

AW: Exception.StackTrace ?
 
Zitat:

Zitat von Deep-Sea (Beitrag 1101923)
@himitsu:
Hast du auch JclStartExceptionTracking aufgerufen?! :wink:

Ich glaub nicht :oops: Jupp, wird es.
Aber komisch, daß es manchmal doch geht und dann wieder nicht.

ToFaceTeKilla 27. Okt 2013 12:20

AW: Exception.StackTrace ?
 
Auch wenn der Thread schon verdammt alt ist, belebe ich ihn mal wieder (ist schließlich bald Halloween ;-) ).

Mit dem Bsp. aus dem von USchuster verlinkten Thread wird immer die vorhergehende Exception angezeigt. Wenn es also die erste Exception nach Start der Anwendung ist, ist der Exception.StackTrace = ''
Ruft man JclLastExceptStackListToStrings direkt im Exceptionhandler auf, bekommt man die aktuelle.
Allerdings fällt so auch der bequemere Zugriff auf den Exception.StackTrace weg :-(

Eventuell könnte man im GetExceptionStackInfoProc ja JclGetExceptStackListToStrings statt JclLastExceptStackListToStrings aufrufen. Dafür braucht man allerdings den zusätzlichen Parameter ThreadID. Hat jemand eine Idee, wie man die bekommt? Die Doku ist an der Stelle etwas "dürftig".

CarlAshnikov 28. Okt 2013 11:25

AW: Exception.StackTrace ?
 
Hilft dir eventuell das hier?
Zitat:

The GetCurrentThreadId function returns the thread identifier of the calling thread.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz