访问gdb中的帧信息

时间:2010-04-02 01:50:31

标签: scripting gdb

在gdb中,有没有办法在脚本中访问info frame的内容?

我正在调试Apache,PHP,APC和我自己的代码之间的问题,我有大约100个内核可供选择。按照这里的说明 http://bugs.php.net/bugs-generating-backtrace.php 我最终得到了一个类似的堆栈跟踪:

 #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 ?? ()

堆栈总是看起来很相似,函数executeZEND_something交错多次。我需要前往execute(本例中为up 2)和print myVar的最后一个实例。

显然gdb知道函数名称,但它是否可以在我可以访问的任何用户变量中显示它们?

键入frame 2显示单行版本,info frame详细显示单个堆栈帧。我想做点什么 while ($current_frame.function_name != "execute") {up;} print myVar但我没有看到如何在gdb中严格执行此操作。

是否有变量/结构/特殊内存位置/允许访问整个堆栈(如bt)或当前堆栈帧(如info frame)的gdb信息?< / p>

1 个答案:

答案 0 :(得分:0)

GBD 7.1支持Python中的accessing frame information以获得这种脚本。