在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 ?? ()
堆栈总是看起来很相似,函数execute
和ZEND_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>