2010-04-02 5 views
3

Dans gdb, existe-t-il un moyen d'accéder au contenu de info frame dans un script? Je suis en train de déboguer un problème quelque part entre Apache, PHP, APC et mon propre code, et j'ai à peu près une centaine de cœurs à choisir. En suivant les instructions ici http://bugs.php.net/bugs-generating-backtrace.php je me retrouve avec un stacktrace comme:Accès aux informations de cadre dans gdb

 
#0 0x0121a31a in do_bind_function (opline=0xa94dd750, function_table=0x9b9cf98, compile_time=0 '\0') at /usr/src/debug/php-5.2.7/Zend/zend_compile.c:2407 
#1 0x0124bb2e in ZEND_DECLARE_FUNCTION_SPEC_HANDLER (execute_data=0xbfef7990) at /usr/src/debug/php-5.2.7/Zend/zend_vm_execute.h:498 
#2 0x01249dfa in execute (op_array=0xb79d5d3c) at /usr/src/debug/php-5.2.7/Zend/zend_vm_execute.h:92 
#3 0x01261e31 in ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER (execute_data=0xbfef80d0) at /usr/src/debug/php-5.2.7/Zend/zend_vm_execute.h:7809 
#4 0x01249dfa in execute (op_array=0xb79d55ec) at /usr/src/debug/php-5.2.7/Zend/zend_vm_execute.h:92 
... 
#26 0x09caa894 in ??() 
#27 0x00000000 in ??() 

La pile regardera toujours la même, avec la fonction execute et ZEND_something entrelacée à plusieurs reprises. Je dois aller jusqu'à la dernière instance de execute (up 2 dans ce cas) et print myVar.

De toute évidence, gdb connaît les noms des fonctions, mais les fait-il apparaître dans toutes les variables utilisateur auxquelles j'aurais accès?

La saisie frame 2 montre une version d'une ligne, et info frame montre une seule structure de pile en détail. Je veux faire quelque chose comme while ($current_frame.function_name != "execute") {up;} print myVar mais je ne vois pas comment le faire strictement dans gdb. Y at-il une variable/structure/emplacement de mémoire spécial/quelque chose qui permet d'accéder aux informations de gdb sur la pile entière (comme bt) ou sur la trame de pile actuelle (comme info frame)?

Répondre

0

GBD 7.1 prend en charge accessing frame information de Python pour exactement ce type de script.

+0

On dirait que c'est le seul moyen sans utiliser quelque chose de fou comme attendre et écrire des tas de trucs bizarres. – Maelstrom

Questions connexes