Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GDB回溯不';不使用cmake显示函数名_C++_Cmake_Gdb - Fatal编程技术网

C++ GDB回溯不';不使用cmake显示函数名

C++ GDB回溯不';不使用cmake显示函数名,c++,cmake,gdb,C++,Cmake,Gdb,在我的CMakeLists文件中,最后我设置了set(CMAKE\u BUILD\u TYPE Debug)。然而,当我尝试进行回溯时,我得到的只是 #0 Car::setTexture (this=0x10025cc20, tex=...) #1 0x0000000100002a0f in ?? () #2 0x0000000020000000 in ?? () #3 0x0000000020000000 in ?? () #4 0x0000000120000000 in ?? ()

在我的CMakeLists文件中,最后我设置了
set(CMAKE\u BUILD\u 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
集(cmake\u build\u 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内部运行,然后,这将解释您观察到的所有症状。

调用
make VERBOSE=1
查看哪些参数添加到您的构建中。您可以将
CMAKE\u CXX\u FLAGS\u DEBUG
设置为
-O0-g2
以获取完整的回溯跟踪。尝试过了。下面是一个库
/usr/bin/c++-O0-g2-I/usr/local/include/SDL2-I/usr/local/include-I/gtest/include-I/gtest-o CMakeFiles/TRTexture\u lib.dir/TRTexture.cpp.o-c TRTexture.cpp
(我截断了此注释中的一些路径),它应该使用这些标志。如果不是,则不是CMake问题,但您必须尝试一个没有CMake的最小示例,并使用调试信息对其进行正确编译。使其没有CMake并使用这些标志是成功的。我得到了正确的回溯。只有在使用带有这些标志的cmake时才失败。可能是
strip--strip debug
或者类似的东西在调用最终二进制文件时被调用?请检查它是如何链接的。