大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
最近在学习高翔博士的经典教程《视觉SLAM十四讲(第2版)》,使用其配套的Github中C++代码进行学习,在调试时发现断点无效、错位的问题,查阅了一些资料,成功解决,记录一下。
编辑器:VSCode
操作系统:Ubuntu20.04
调试方式:cmake + make
关于在VScode中调试C++代码的教程,可以参考这个:Linux下使用VS Code + CMake 调试c++程序
在最开始的时候,CMakeLists.txt中设置成了发布模式(Release),设置断点后,调试时断点无效,即无法在任何断点处停下,而在CMakeLists.txt中设置set(CMAKE_BUILD_TYPE "Debug")
后,调试时能够停下,但是没有在断点处停下,而是在别的地方,如下图所示:
从这张图可以看到,断点设置在42行,但调试时却停在46行的for循环入口处,显然不是我们想要的。
更离谱的是,在某些位置,调试前断点设置在某行,调试时断点却出现在别的地方,如下图所示,调试开始前设置的断点位置:
调试时的断点位置:
可以看出,调试前断点在92行,调试开始后断点却在95行,后来查阅资料才发现,这是代码编译优化导致的。
在VScode中使用cmake + make 方式调试C++代码时,想要正常进行断点调试,在CMakeLists.txt文件中需要注意以下两点:
set(CMAKE_BUILD_TYPE "Debug")
,如果设置为"Release"模式,设置断点后在调试时是默认无效的,进入调试后,断点会变为空心断点,程序不会在任何断点处停下。set(CMAKE_CXX_FLAGS "-O3")
(或不写),否则“任何级别的优化都将带来代码结构的改变,将会使目标代码的执行顺序变得面目全非,导致调试信息严重不足。”综上,在CMakeLists.txt中设置如下:
set(CMAKE_BUILD_TYPE "Debug")
# set(CMAKE_CXX_FLAGS "-O3")
调试时能够在断点处正常停止:
问题成功解决。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧