2010-03-19 15 views
6

Ho un programma scritto in C++, su Linux, compilato con -g.Accesso alle informazioni sul programma che gdb vede in C++

Quando eseguo sotto gdb, posso

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). 

Ora, dato che il mio programma è compilato con "-g" - C'è qualche cosa che posso accedere a questo potere all'interno del mio programma stesso?

I.e. dato che il mio programma è compilato con "-g", c'è qualche

std::vector<string> getStackFrame(); 

funzione posso chiamare per ottenere lo StackFrame corrente nel punto corrente di esecuzione?

Dato un puntatore ad un oggetto ed è di tipo ... posso fare

std :: vector getClassMember (class_name);

?

Mi rendo conto che la risposta predefinita è "no, C++ non supporta quel livello di introspezione" - tuttavia, ricorda che sono su linux, il mio programma è compilato con "-g" e gdb può farlo, così chiaramente l'inforamtion è lì. La domanda è: c'è qualche API per accedervi?

MODIFICA: PS Naysers, mi piacerebbe vedere un motivo per chiudere questa domanda.

+1

Perché qualcuno dovrebbe voler chiudere una domanda perfettamente valida? –

risposta

2

Ricordo di aver usato libbfd per ottenere nomi di funzioni da file oggetto. È una libreria per leggere i formati degli oggetti, forse puoi anche leggere altre informazioni di debug usando questo. (Non so a dire il vero)

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

Problemi correlati