Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Aufruf-Stack mit JclDebug (https://www.delphipraxis.net/38366-aufruf-stack-mit-jcldebug.html)

Ganymed 18. Jan 2005 10:18


Aufruf-Stack mit JclDebug
 
Hi!

Ich möchte bei einer Exception zur Laufzeit des Programmes, also ohne Vorhandensein der IDE, den Call-Stack abfragen. Hier im Forum wurde dazu die Methode ProcByLevel() aus JCLDebug empfohlen.
Um das mal auszutesten, habe ich mir ein kleine Progi gemacht mit einem Button, der eine Exception auslöst.
Der "Call-Stack", den ich von Jedi bekomme, sieht leider nicht so aus, wie ich ihn gerne hätte:
Code:
'Fehler' is not a valid integer value
--- Call-Stack: ---
TForm1.ExceptionHandler
TApplication.HandleException
StdWndProc
TWinControl.DefaultHandler
TWinControl.WndProc
StdWndProc
Project1
Der Call-Stack zieht sich hoch bis zu Exception-Handler, statt beim TForm1.Button1Click() stehen zu bleiben. Ich denke zwar, dass ich verstehe wieso das so ist, trotzdem ist es nicht schön.
Was nicht nur unschön, sondern auch wenig hilfreich ist, ist dass die Methode, in der die Exception wirklich aufgetreten ist (TForm1.Button1Click()) gar nicht auftaucht, sondern stattdessen nur von "TWinControl.DefaultHandler" und "TWinControl.WndProc" die Rede ist...
Außerdem fehlen die übergebenen Parameter voll und ganz.

Muss man außer in den Projektoptionen noch etwas einstellen?
Oder kann man das noch irgendwie anders machen? Was ist z.B. mit TJclStackInfoList?

TIA

Ganymed

Bernhard Geyer 18. Jan 2005 12:32

Re: Aufruf-Stack mit JclDebug
 
Probier mal die Funktion JclLastExceptStackListToStrings.

shmia 18. Jan 2005 12:34

Re: Aufruf-Stack mit JclDebug
 
Bei der JCL ist auch ein Demo-Project namens StackTrackExample.dpr dabei.
Wenn man die Compiler-Option Stack-Frames und die Linker-Option TD32-Debug Info aktiviert, dann
sind enthält der Stack Trace (fast) alle gewünschten Daten.

Ganymed 18. Jan 2005 12:46

Re: Aufruf-Stack mit JclDebug
 
@shmia:
Ich hab mir das Demo angesehen, aber es zeigt auch nicht viel Anderes, als mein Testprojekt... Selbst mit der Option TD32-Debug Info

@Bernhard Geyer: JclLastExceptStackListToStrings() wird im StackTrackExample.dpr verwendet, mit eben wenig anderen Ergebissen... :-(

generic 20. Jan 2005 10:46

Re: Aufruf-Stack mit JclDebug
 
map-files anschalten!

td32 bringt imho nix

fylo 20. Jan 2005 20:31

Re: Aufruf-Stack mit JclDebug
 
hi
Zitat:

Zitat von generic
map-files anschalten!

td32 bringt imho nix

bei mir ist es genau andersrum :gruebel:

legoracer 4. Feb 2010 13:20

Re: Aufruf-Stack mit JclDebug
 
hatte dasselbe problem, dass die eigtl. Adresse nicht in der
Stackliste ist, und es so gelöst:

die genaue Adresse der Codezeile lässt sich mit ExceptAddr abfragen,
und das debug info - z.B. in einem try except block ungefähr so darstellen:

try
..
except on e : exception do
showmessage(TextualDebugInfoForAddress(Cardinal(Ex ceptAddr)));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.

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