 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Andy Guest
|
Posted: Mon Sep 04, 2006 3:58 pm Post subject: Stack-Trace ausgeben |
|
|
Hallo,
ist es in C++ irgendwie möglich, sich den aktuellen Aufruf-Stack
ausgeben zu lassen?
Ich will das in Exceptions verwenden, damit ich die Fehlerstelle in ein
Log-File schreiben kann.
Gruß,
Andy |
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Mon Sep 04, 2006 5:15 pm Post subject: Re: Stack-Trace ausgeben |
|
|
Andy wrote:
| Quote: | Hallo,
ist es in C++ irgendwie möglich, sich den aktuellen Aufruf-Stack
ausgeben zu lassen?
|
Es gibt keine Standard-Möglichkeit in ISO-C++. Einige Implementationen
bieten spezielle Funktionen dafür an. So gibt es bei der glibc z.B. die
Funktionen backtrace() und backtrace_symbols(). |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Tue Sep 05, 2006 1:12 pm Post subject: Re: Stack-Trace ausgeben |
|
|
Andy wrote:
| Quote: | ist es in C++ irgendwie möglich, sich den aktuellen Aufruf-Stack
ausgeben zu lassen?
|
Möglich ist es, meistens. Portable, nein (und Standard-konform,
nein).
Für Intel und Sparc gibt es Versionen auf meiner Site:
kanze.james.neuf.fr/code-de, danach im Komposant
Util/Port/StackTrace. Die eigentliche Implementierung steht
unter dem conf-Verzeichnis. Und hängt vom Rechner aber auch vom
Compiler, und sogar den Compiler-Optionen ab. (Ich brauchte
besondere Optionen bei VC++, z.B., damit es funktionniert.)
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Tue Sep 05, 2006 6:19 pm Post subject: Re: Stack-Trace ausgeben |
|
|
Andy wrote:
| Quote: | ist es in C++ irgendwie möglich, sich den aktuellen Aufruf-Stack
ausgeben zu lassen?
Ich will das in Exceptions verwenden, damit ich die Fehlerstelle in ein
Log-File schreiben kann.
|
Es sieht, wie Rolf schon sagte, schlecht aus.
Vielleicht noch ein paar Hintergründe:
C/C++ macht praktisch keine Vorgaben, wie die Programmsemantik in
Maschinensprache zu übersetzten ist. Das gibt dem Compiler weiträumigen
Spielraum für Optimierungen.
Beispiel:
int foo(int param1)
{ ...
}
int bar(int param1)
{ return foo(param1+1);
}
Der Compiler könnte die Funktion bar (zumindest auf allen mir bekannten
Plattformen) wie folgender Pseudocode übersetzten:
bar:
increment param1
jump foo
Das führt dazu, dass der Aufruf von bar keinerlei Spuren hinterlässt,
außer natürlich, dass der Parameter um eins erhöht wurde.
Mit der Forderung nach einem Stack-Trace sind die obige und etliche
andere Stack-Frame- und Inline-Optimierungen verboten.
Solche Optimierungen betreffen hauptsächlich OO-Code, in dem kleine,
triviale Funktionen sehr viel häufiger vorkommen.
Marcel |
|
| Back to top |
|
 |
Rene Möhring Guest
|
Posted: Mon Sep 11, 2006 12:32 am Post subject: Re: Stack-Trace ausgeben |
|
|
On 2006-09-04, Andy <andysm (AT) gmx (DOT) de> wrote:
| Quote: | Hallo,
ist es in C++ irgendwie möglich, sich den aktuellen Aufruf-Stack
ausgeben zu lassen?
Ich will das in Exceptions verwenden, damit ich die Fehlerstelle in ein
Log-File schreiben kann.
|
Wenn es nur um die Codestelle geht, reichen vielleicht auch die Makros
__LINE__ und __FILE__.
--
I'm not a racist. I hate everyone equally! |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|