【问题标题】:Failed to use gdb for an executive file generated by cmakecmake生成的执行文件使用gdb失败
【发布时间】:2020-10-02 19:08:38
【问题描述】:

要使用cmake 调试C++ 代码,我有一个技巧,即在源代码根目录中CMakeLists.txt 文件的project (myProjectYY) 行之前添加以下行。

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

所以,在cmakemake之后,我得到了mainYY的可执行文件,我可以简单地运行gdb mainYY进行调试,因为我应该可以看到mainYY.cpp的源代码.

我有 2 个单独的项目,它们已经被其他人称为 cmakemake,即一个简单的项目(即myProject1)和一个复杂的项目(即myProject2)。对于myProject1,上面的技巧对我有用,即在我添加了上面的3行并再次重新执行cmakemake以获得main1之后,我可以看到main1.cpp的源代码通过只需在gdb 中执行l

但是对于myProject2,我也是这样做的,即我添加了上面的3行并再次重新执行cmakemake以获得main2,但是在gdb中没有源代码main2.cpp。也就是gdb main2首先给了我Reading symbols from main2...(no debugging symbols found)...done。然后如果我在gdb 中运行l,我就有No symbol table is loaded. Use the "file" command

myProject1myProject2 之间存在这种差异的最可能原因是什么?如何找出这些可能的原因,以及如何进行修复以便可以为myProject2 进行调试?

谢谢。

【问题讨论】:

标签: c++ gcc cmake gdb g++


【解决方案1】:

正如您所提到的,您的myProject2 是一个复杂的项目。某处可能有SET( CMAKE_BUILD_TYPE Release ... FORCE )。使用fgrep -R "CMAKE_BUILD_TYPE" 进行检查,甚至更好的是,在任何地方删除 this 的所有定义。

请改用cmake -DCMAKE_BUILD_TYPE=Debug

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多