-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hallo,
Thomas Guettler guettli@web.de schrieb:
//... T.funktion_die_leider_Exception_wirft(); catch(Exception e){ //... }
Ich wuerde gerne wissen wo genau in T.fun...() die Exception auftritt (die Zeile in der das throw() aufgerufen wird). Man koennte mit dem Debugger haendisch durchgehen, aber das ist zu Zeitaufwendig.
Ein Funktion taucht nur solange in einem Stacktrace auf, wie sie aktiv ist. Bei einem throw () wird aber die Funktion, die die Exception wirft, verlassen und damit deren Frame vom Stack entfernt - alle Spuren (bis auf das geworfene Objekt) sind bis zu der Funktion verschwunden, die das catch () enthaelt. Die einzige Moeglichkeit, die ich sehe, waere einen Breakpoint auf throw() zu setzen (wenn es dies Funktion ueberhaupt gibt und sie nicht vom Compiler expandiert wird).
BTW, das eigentliche Problem hat sich inzwischen erledigt. Waere aber trotzdem interessant zu wissen wie man den Stacktrace der throw()-Zeile bekommt. Bei Python wird er, wenn man die Exception nicht auffaengt automatisch angezeigt. (oh, ich liebe Script-Sprachen).
So ein Trace setzt voraus, dass man waehrend des Abraeumens des Stacks aufzeichnet, was man da abraeumt. Soweit ich weiss, macht C++ das nicht. Der Funktionsname ist in einem compilierten Programm zur Laufzeit gar nicht so einfach zu ermitteln, man koennte bestenfalls irgendwelche Hooks fuer den Debugger vorsehen (das wird z.B. beim dynamischen Loader gemacht).
Holger - -- Holger Dietze, email: holger.dietze@advis.de "The more data I punch in this card, the lighter it becomes, and the lower the mailing cost." -- Stan Kelly-Bootle, "The Devil's DP Dictionary"