[英]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的主要优势之一就是使可移植性变得容易,因此您不应该轻易将其扔出窗外。 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.