2010-03-19 5 views
6

Tengo un programa escrito en C++, en Linux, compilado con -g.Accediendo a la información del programa que gdb ve en C++

Cuando corro bajo el BGF, puedo

1) set breakpoints 
2) at those breakpoints, print out variables 
3) see the stackframe 
4) given a variable that's a structure, print out parts of the structure (i.e. how ddd displays information). 

Ahora, dado que mi programa se compila con "-g" - ¿Hay alguna forma que pueda acceder a este poder dentro de mi propio programa?

I.e. dado que mi programa se compila con "-g", ¿hay alguna

std::vector<string> getStackFrame(); 

función que pueda llamar para obtener el entorno de pila actual en el punto de ejecución actual?

Dado un puntero a un objeto y que es de tipo ... puedo hacer yo

getClassMember std :: vector (class_name);

?

Me doy cuenta de que la respuesta predeterminada es "no, C++ no admite ese nivel de introspección"; sin embargo, recuerde que estoy en Linux, mi programa está compilado con "-g" y gdb puede hacerlo, tan claramente la inforamción está allí. La pregunta es: ¿hay alguna API para acceder a ella?

EDIT: PS Naysers, me gustaría ver una razón para cerrar esta pregunta.

+1

¿Por qué nadie quiere cerrar una pregunta perfectamente válida? –

Respuesta

2

Recuerdo usar libbfd para obtener nombres de funciones de archivos de objetos. Es una biblioteca para leer formatos de objetos, tal vez también puede leer otra información de depuración usando esto. (No sé para ser honesto)

http://www.skyfree.org/linux/references/bfd.pdf

Cuestiones relacionadas