我遇到了核心,无法从中获取回溯。我有两个问题。
(gdb)bt
警告:GDB无法在0xe67a24找到函数的开头。
GDB is unable to find the start of the function at 0xe67a24
因此无法确定该函数的堆栈帧的大小。 这意味着GDB可能无法访问该堆栈帧,或 它下面的帧。 此问题很可能是由无效的程序计数器或 堆栈指针。 但是,如果您认为GDB应该只是进一步搜索 来自0xe67a24的代码看起来像一个开头 功能,您可以使用`set增加搜索范围 heuristic-fence-post'命令。 (GDB)
答案 0 :(得分:7)
当我看到这个问题时,通常可以使用的解决方法是命令:
x / 100a $ sp
这将使用符号转储堆栈,并且很可能在最近的回溯部分将存在。它仍然不会找到实际的当前堆栈帧,但应该找到带有符号的最新堆栈帧。
根据目标体系结构,$ sp可能需要是其他东西 - 无论寄存器是堆栈指针。
我看到gdb无法找到调用堆栈的最常见情况是OpenGL驱动程序崩溃,而不使用预期的ARM ABI调用约定。
答案 1 :(得分:0)
我遇到了同样的错误,结果是另一个问题的征兆:我没有向gdb提供文件,因此无法建立符号表。通过gdb filename
而不是仅仅gdb
来启动它也解决了这个问题。