问题可能原因有:

  1. 调试时断点无效,大概率是 CMakeLists.txt 设置成了 Release 模式;
  2. 如果在 CMakeLists.txt 在设置成 Debug 以后,调试时能够停下来,但没在断点处停下,而是停在了别的地方,这就是代码编译优化导致的了。应该是 CMakeLists.txt 中添加了 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3"),测试发现 O1O2O3 都会出现同样的问题。也就是说,任何级别的优化都会带来代码结构的改变,会使目标代码的执行顺序变得面目全非,导致调试信息严重不足。
    • 有的文章中说添加设置 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") 能解决问题,但是亲测若添加了代码编译优化,是没办法解决这问题的。

问题二对应的场景为以下:

程序运行前:
在这里插入图片描述

程序运行后:
在这里插入图片描述
可以在 CMakeLists 中将 Debug 和 Release 使用 CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE 区分开来。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐