Wie funktioniert backtrace?

Ja, ich weiss, ihr seid alle schon genervt von meinen vielen Fragen, aber trotzdem: weiss jemend wie man bacjtrace benutzt?
Das einzigste, was ich weiss, ist der prototyp in execinfo.h:

/\* Return names of functions from the backtrace list in ARRAY in a newly 
 malloc()ed memory block. \*/ 
extern char \*\*\_\_backtrace\_symbols \_\_P ((void \*\_\_const \*\_\_array, int \_\_size)); 
extern char \*\*backtrace\_symbols \_\_P ((void \*\_\_const \*\_\_array, int \_\_size)); 

Also: versteht jemand von euch etwas davon?
Ich dachte erst man muesste schreiben:

 void \*array[20];
 backtrace(&array, 20);

aber das gibt Fehler vom Compiler:
Falscher Typ fuer Argument 1 von backtrace()
also ich dachte ja ich muesste backtrace einen Zeiger auf einen Zeiger auf ein void-Array geben, versteh zwar nicht wie das gehen soll, aber hoffentlich einer von euch!

MfG Paul

Hallo,

Ja, ich weiss, ihr seid alle schon genervt von meinen vielen
Fragen, aber trotzdem: weiss jemend wie man bacjtrace benutzt?

Siehe: http://www.gnu.org/software/libc/manual/html_node/Ba…

–> unten bei:
/* Obtain a backtrace and print it to stdout. */
findest Du ein komplettes Beispielprogramm.

Grüße

CMБ

Hallo,

Hallo.

bacjtrace

Ich meinte natürlich bac_k_trace

http://www.gnu.org/software/libc/manual/html_node/Ba…

Sehr gute Idee!
Soger mit Bespiel!
Vielen Dank!

Grüße

Paul

[0x8048a47]: [0x8049465]: [0x804983e]: [0x804a551]: /lib/libc.so.6(\_\_libc\_start\_main+0x11e) [0x40035a8e]: [0x8048971]: Fehler ...

Ja… auch schoen, aber geht es auch so, dass backtrace mir die Namen (wie sie bei mir im Code sind) ausgibt?
Das waere sehr viel besser zu lesen. Ich weiss ja nicht, welche Prozedur mit [0x8049465] gemeint ist…
Also gibt es da noch eine Moeglichkeitzur Ueberstzung oder koennte ich mir mit irgendeiner anderen Funtion ausgeben lassen, welche von meinen Prozeduren nun hintzer dieser Zahl steckt???
Gruß Paul

Hiho

Also gibt es da noch eine Moeglichkeitzur Ueberstzung oder
koennte ich mir mit irgendeiner anderen Funtion ausgeben
lassen, welche von meinen Prozeduren nun hintzer dieser Zahl
steckt???
Gruß Paul

Ich weiß nicht, ob du es überlesen hast:

Currently, the function name and offset only be obtained on
systems that use the ELF binary format for programs and libraries.
On other systems, only the hexadecimal return address will be
present. Also, you may need to pass additional flags to the
linker to make the function names available to the program. (For
example, on systems using GNU ld, you must pass (`-rdynamic’.)

Jedenfalls mit „-rdynamic“ compilieren.

mfg TLF