2012-07-19 9 views
13

Ho bisogno di ottenere le informazioni fornite da addr2line (file e riga da backtracing di una chiamata di funzione) da un programma C++. Esiste una chiamata di libreria simile a addr2line?Esiste una chiamata alla libreria per addr2line?

modifica: Sto lavorando in un ambiente Linux.

So che posso chiamare addr2line direttamente e so che posso usare il source code di addr2line nel mio programma (che è anche GPL concesso in licenza). Ma suppongo che chiamare una funzione di libreria, se esiste, sia più pulita.

modifica: Userò bfd dei binutils, proprio come fa addr2line. Cosa significa bfd comunque?

+0

libdwarf è quello che stai cercando –

+0

Grazie per il suggerimento. Ho provato dwarfdump e stampa solo dove vengono dichiarate le funzioni, non dove vengono chiamate. Non riuscivo però a trovare una documentazione decente ... – steffen

+2

'bfd' è il http://en.wikipedia.org/wiki/Binary_File_Descriptor_library (sebbene originariamente fosse l'altro significato di BFD :) – ecatmur

risposta

6

È possibile provare la funzione dladdr(). Usa i simboli dinamici del programma, non le informazioni di debug (compila il programma con gcc -rdynamic).

Inoltre, è possibile controllare la libreria backtrace o la libreria di livello superiore stacktrace.
Non esattamente quello che chiedi, ma potrebbero rivelarsi utili.

+1

Grazie per i suggerimenti. Con 'dladdr()' ottengo informazioni solo per codice collegato dinamicamente e solo il nomefile, non la riga, se ho capito bene la manpage. Sto già usando il backtrace per ottenere l'indirizzo. Quello di cui ho bisogno ora è qualcosa per ottenere il file e la linea fuori dall'indirizzo. stacktrace è un semplice wrapper per il backtrace. – steffen

+0

Oltre a questi, c'è anche la libreria 'libunwind': http://www.nongnu.org/libunwind/ –

Problemi correlati