【发布时间】:2016-07-04 06:49:43
【问题描述】:
当我有一个核心转储(在段错误之后)并且我感兴趣的框架看起来像这样时:
#2 0x000000000043cbfa in foo::Bar::baz(float) ()
如何使用 GDB 提取给定框架中的参数值?
【问题讨论】:
-
您可以尝试手动检查堆栈帧(信息帧、信息注册、x/
x $sp...)。看起来此函数缺少调试信息,因此您可能必须反汇编代码并尝试了解发生了什么。 -
函数名对我来说已经足够信息了。我只想知道参数值。问题基本上是我是否可以在不实际反汇编代码的情况下获得值。我有 gdb 的基本知识,但快速谷歌搜索没有结果。
-
在崩溃时也不知道该参数存储在哪里 - 例如它可能位于堆栈中的寄存器中,具体取决于调用约定和函数中的当前状态。没有人知道至少不知道什么处理器和什么操作系统(并且可能也取决于使用什么编译器和什么优化级别)
-
@MatsPetersson 我可以通过任何在线资源了解这些内容吗? (顺便说一句。它是 amd64,glibc cpp。)