我一直致力于为 C++ 库添加功能。该库是使用 CMake 编译的。它有一组复杂的依赖关系。我有一个运行与库相关的代码的 C++ 测试文件。设编译后的文件为test.cpp
,其可执行文件为test
。
到目前为止,我一直在通过向库文件中添加“cout”语句来进行调试。我经常遇到段错误,但通常可以通过检查来解决。显然,这是低效的。我想通过使用 gdb 查看代码在哪里失败。通过这个stackoverflow post ,我尝试向我的 cmake 添加调试标志,但是当我在 test
上运行 gdb 并执行 bt
时,我没有获得全面的信息。我只是获取代码失败的库中函数的名称,而不是确切的行。
谁知道如何获取gdb信息?
最佳答案
虽然手动添加相应的编译器标志会起作用,但这并不是最方便的方法。作为suggested by @ruslo ,您应该使用以下命令行来获取调试支持:
cmake -DCMAKE_BUILD_TYPE=Debug <path_to_source>
这有几个原因:
- 编译器标志不可移植。
-g -O0
可以在 gcc 上运行,但是其他编译器呢? CMake 的主要优势之一是易于移植,因此您不应轻易将其扔出窗外。 - 多配置生成器(像大多数 IDE 生成器一样)允许同时使用多个配置文件。您不会想强制这些 IDE 的用户在没有优化的情况下进行编译,即使他们选择了 Release 配置文件,对吗?
- 对
CMAKE_CXX_FLAGS
的更改是全局的。一旦您必须将多个项目组合在一起,这就变得特别讨厌。如果您绝对需要手动提供编译器标志,请使用target_compile_options
为此目的。 - 最后但同样重要的是:设置
CMAKE_BUILD_TYPE
是解决此问题的惯用方法。它是解决它的唯一正确工具,熟悉 CMake 的人(当然,没有太多这样的东西......)如果你使用非惯用的解决方法来解决它会感到惊讶。
关于c++ - 调试 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25189509/