问题可能原因有:
- 调试时断点无效,大概率是
CMakeLists.txt
设置成了Release
模式; - 如果在
CMakeLists.txt
在设置成Debug
以后,调试时能够停下来,但没在断点处停下,而是停在了别的地方,这就是代码编译优化导致的了。应该是CMakeLists.txt
中添加了set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
,测试发现O1
、O2
、O3
都会出现同样的问题。也就是说,任何级别的优化都会带来代码结构的改变,会使目标代码的执行顺序变得面目全非,导致调试信息严重不足。 - 有的文章中说添加设置SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
能解决问题,但是亲测若添加了代码编译优化,是没办法解决这问题的。
问题二对应的场景为以下:
程序运行前:
程序运行后:
可以在 CMakeLists 中将 Debug 和 Release 使用
CMAKE_CXX_FLAGS_DEBUG
和
CMAKE_CXX_FLAGS_RELEASE
区分开来。
本文转载自: https://blog.csdn.net/qq_28087491/article/details/137646688
版权归原作者 泠山 所有, 如有侵权,请联系我们删除。
版权归原作者 泠山 所有, 如有侵权,请联系我们删除。