2010-04-02 68 views
3

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

我正在调试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的信息?

回答

0

GBD 7.1支持Python的accessing frame information这种脚本。

+0

看起来像这是唯一的方法,而不使用像预期的东西疯狂和脚本一大堆奇怪的东西。 – Maelstrom 2010-09-23 21:00:13