gpt4 book ai didi

gdb - 当 gdb 无法确定堆栈帧的大小时,如何使用 gdb 获取回溯?

转载 作者:行者123 更新时间:2023-12-01 16:12:02 36 4
gpt4 key购买 nike

我遇到了核心,无法从中获取回溯。我有两个问题。

  1. 我可以从以下位置找出导致崩溃的行或崩溃发生的位置吗列出命令输出?
  2. 否则如何处理。我应该将 heuristic-fence-post 设置为多少才能得到一些有意义的数据。我尝试将其设置为 0 但没有成功。

(gdb)bt

0 0x00e67a24 在 ?? ()

警告:GDB 在 0xe67a24 处找不到函数的开头。

GDB is unable to find the start of the function at 0xe67a24

因此无法确定该函数的堆栈帧的大小。这意味着 GDB 可能无法访问该堆栈帧,或者它下面的框架。 此问题很可能是由无效的程序计数器或堆栈指针。 但是,如果您认为 GDB 应该简单地向后搜索从 0xe67a24 开始,代码看起来像是 a 的开头功能,您可以使用`set来增加搜索范围heuristic-fence-post' 命令。(gdb)

最佳答案

当我看到此问题时,通常有效的解决方法是命令:

x/100a $sp

这将转储带有符号的堆栈,并且回溯的最近部分可能会在那里。它仍然找不到实际的当前堆栈帧,但应该找到带有符号的最新堆栈帧。

根据目标体系结构,$sp 可能需要是其他内容 - 无论寄存器是堆栈指针。

我看到 gdb 无法找到调用堆栈的最常见情况是 OpenGL 驱动程序崩溃,这些驱动程序不使用预期的 ARM ABI 调用约定。

关于gdb - 当 gdb 无法确定堆栈帧的大小时,如何使用 gdb 获取回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057047/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com