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