在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 ??()
堆栈总是会相似,功能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的信息?
看起来像这是唯一的方法,而不使用像预期的东西疯狂和脚本一大堆奇怪的东西。 – Maelstrom 2010-09-23 21:00:13