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

程序运行后:




















