问题可能原因有:
- 调试时断点无效,大概率是
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")
能解决问题,但是亲测若添加了代码编译优化,是没办法解决这问题的。
- 有的文章中说添加设置
问题二对应的场景为以下:
程序运行前:
程序运行后: