c++ - GDB Backtrace 不使用 cmake 显示函数名称

标签 c++ cmake gdb

在我的 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 ()

最佳答案

However, when I regenerate the build files with the cmake set(CMAKE_BUILD_TYPE Debug) commented out, the debugging symbols are missing (as expected), but the backtrace function calls are shown.

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

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

关于c++ - GDB Backtrace 不使用 cmake 显示函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198502/

相关文章:

c++ - 初始化数组的更好方法

c - libconfig:使用 CMake 编译时出错

c++ - 从另一个 CMakeLists.txt 将变量读入 cmake

c - 在 MonoDevelop 中调试 C 应用程序失败

c++ - gdb 在正在调试的应用程序崩溃时创建一个文件

debugging - 如何搜索在 GDB 的 TUI 模式下打开的文件

c++ - -> 在 C++ 中是什么意思?

C++ 传递函数的问题(数学不加起来)

c++ - 如何在固定宽度类型上强制执行无符号算术?

c++ - CMake 和不同版本的 Visual Studio