2012-07-19 7 views
13

Necesito obtener la información provista por addr2line (el archivo y la línea retroceden una llamada de función) desde dentro de un programa C++. ¿Hay una llamada a la biblioteca similar a addr2line?¿Hay una llamada de biblioteca a addr2line?

editar: Estoy trabajando en un entorno Linux.

Sé que puedo llamar a addr2line directamente y sé que puedo usar el source code de addr2line en mi programa (que también tiene licencia GPL). Pero supongo que llamar a una función de biblioteca, si existe, es más clara.

edición: voy a utilizar BFD de las binutils, al igual que lo hace addr2line. ¿Qué significa bfd de todos modos?

+0

libdwarf es lo que estás buscando –

+0

Thankd por la sugerencia. Probé dwarfdump y solo imprime donde se declaran las funciones, no donde se llaman. Aunque no pude encontrar una documentación decente ... – steffen

+2

'bfd' es la http://en.wikipedia.org/wiki/Binary_File_Descriptor_library (aunque originalmente significaba el otro significado de BFD :) – ecatmur

Respuesta

6

Puede probar la función dladdr(). Utiliza los símbolos dinámicos del programa, no la información de depuración (compila el programa con gcc -rdynamic).

Además, puede consultar la biblioteca backtrace o la biblioteca de nivel superior stacktrace.
No es exactamente lo que estás preguntando, pero pueden ser útiles.

+1

Gracias por los tips. Con 'dladdr()' obtengo información solo para el código vinculado dinámicamente y solo el nombre de archivo, no la línea, si entiendo la página de manualización correcta. Ya estoy usando la traza inversa para obtener la dirección. Lo que necesito ahora es algo para sacar el archivo y la línea de la dirección. stacktrace es una mera envoltura para rastrear. – steffen

+0

Además de estos, también está la biblioteca 'libunwind': http://www.nongnu.org/libunwind/ –

Cuestiones relacionadas