C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Stack-Trace ausgeben

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andy
Guest





PostPosted: Mon Sep 04, 2006 3:58 pm    Post subject: Stack-Trace ausgeben Reply with 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.

Gruß,
Andy
Back to top
Rolf Magnus
Guest





PostPosted: Mon Sep 04, 2006 5:15 pm    Post subject: Re: Stack-Trace ausgeben Reply with quote



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





PostPosted: Tue Sep 05, 2006 1:12 pm    Post subject: Re: Stack-Trace ausgeben Reply with quote



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





PostPosted: Tue Sep 05, 2006 6:19 pm    Post subject: Re: Stack-Trace ausgeben Reply with quote

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





PostPosted: Mon Sep 11, 2006 12:32 am    Post subject: Re: Stack-Trace ausgeben Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.