6
votes

Accéder à des informations sur le programme que GDB voit en C ++

J'ai un programme écrit en C ++, sur Linux, compilé avec -g.

Lorsque je l'exécute sous GDB, je peux xxx

maintenant, étant donné que Mon programme est compilé avec "-g" - existe-t-il de toute façon que je puisse accéder à cette puissance dans mon programme lui-même?

IE Étant donné que mon programme est compilé avec "-g", y a-t-il une fonction xxx

que je peux appeler pour obtenir le programme de cheminement actuel au point d'exécution actuel?

donné un pointeur à un objet et c'est de type ... puis-je faire

std :: vecteur getclassmember (class_name);

?

Je réalise que la réponse par défaut est "Non, C ++ ne prend pas en charge ce niveau d'introspection" - cependant, je rappelle que je suis sur Linux, mon programme est compilé avec "-g", et GDB peut le faire, donc clairement que l'inféromention est là. La question est: y a-t-il des API d'y accéder?

EDIT: PS NYYSERS, j'aimerais voir une raison de la fermeture de cette question.


1 commentaires

Pourquoi quelqu'un voudrait-il fermer une question parfaitement valable?


3 Réponses :


2
votes

Je me souviens d'utiliser libbfd pour obtenir des noms de fonction des fichiers d'objet. C'est une bibliothèque de formats d'objet de lecture, vous pouvez peut-être également lire d'autres informations de débogage à l'aide de cela. (Je ne sais pas être honnête)

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


0 commentaires

3
votes

Le format de débogage est appelé nain. Cela devrait vous indiquer où chercher plus loin.

Bibliothèque Pour lire les informations de débogage du nain Elf < / p>


0 commentaires

0
votes

Cela a toujours été l'objectif de libcwd, mais en raison d'un manque d'intérêt de la communauté, je n'ai jamais eu plus loin que la lecture des informations de numéro de ligne de source source de la section .debug_line de NAREF.


0 commentaires