GDB 回溯跟踪不显示带有 cmake 的函数名称

GDB Backtrace doesn't show function names with cmake

本文关键字:cmake 函数 回溯 跟踪 显示 GDB      更新时间:2023-10-16

在我的CMakeLists文件中,最后我有set(CMAKE_BUILD_TYPE Debug)。然而,当我尝试进行回溯时,我得到的只是

#0  Car::setTexture (this=0x10025cc20, tex=...)
#1  0x0000000100002a0f in ?? ()
#2  0x0000000020000000 in ?? ()
#3  0x0000000020000000 in ?? ()
#4  0x0000000120000000 in ?? ()
#5  0x000000010023ce90 in ?? ()
#6  0x0000008000000060 in ?? ()

到目前为止,我尝试过的所有其他调试(list等)都运行良好。只有回溯缺少函数名。然而,当我在注释掉cmake set(CMAKE_BUILD_TYPE Debug)的情况下重新生成构建文件时,调试符号丢失了(正如预期的那样),但显示了回溯函数调用。

(gdb) backtrace
#0  0x00000001000056b4 in Car::setTexture(TRTexture) ()
#1  0x0000000100002a0f in SDLWrapper::loadSprite(Sprite*) ()
#2  0x0000000100004654 in TypeRight::startGame() ()
#3  0x0000000100001cc8 in main ()

但是,当我在注释掉cmake集(cmake_build_TYPE Debug)的情况下重新生成构建文件时,调试符号丢失了(正如预期的那样),但显示了回溯函数调用。

最可能的原因是:您将GDB指向了错误的可执行文件。

据我所知,更改CMAKE_BUILD_TYPE会更改构建输出目录,如果您没有为此调整GDB命令,如果您连接到一个正在运行的进程,而不是从GDB内部运行,那么这将解释您观察到的所有症状。