繁体   English   中英

调试C ++库

[英]Debugging C++ Library

我一直在努力向C ++库添加功能。 该库是使用CMake编译的。 它具有一组复杂的依赖关系。 我有一个C ++测试文件,该文件运行与该库有关的代码。 让编译后的文件为test.cpp ,其可执行文件为test

到目前为止,我一直在通过在库文件中添加“ cout”语句来进行调试。 我经常遇到细分错误,但通常可以通过检查找出来。 显然,这是低效的。 我想通过使用gdb查看代码失败的地方。 通过这个stackoverflow帖子 ,我尝试将调试标志添加到我的cmake中,但是当我在test运行gdb并执行bt ,我没有得到完整的信息。 我只是在代码失败的库中获得函数的名称,而不是确切的行。

有人知道如何获取gdb信息吗?

虽然手动添加各个编译器标志将起作用,但这不是最方便的方法。 @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的人(可以肯定的是,那里的东西并不太多...)将会感到惊讶。

我知道了。 他们的关键是将“ -g”标志添加到

SET (CMAKE_C_FLAGS ...

SET(CMAKE_CXX_FLAGS ...

CMakeLists.txt文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM