VScode用Cmake调试C++代码出现断点不在目标位置

在VScode中用Cmake调试C++程序,遇到断点不在预期位置的问题,原因是编译时使用了-O3优化选项导致。通过注释掉CMakeLists.txt中包含-O3的行,重新编译后,成功在453行停下进行调试。
摘要由CSDN通过智能技术生成

VScode用Cmake调试C++代码出现断点不在目标位置

初始问题

当把断点打到某一行想要的位置处后,运行调试,发现开始运行的位置不在目标位置处

想在453行处停下
目标位置
最后直接在470行处停下在这里插入图片描述

解决方法

注释掉工程下最外层的那个CMakeList.txt中的两行代码,然后按Ctrl+S,会自动重新编译CMakeList.txt到build文件夹

这两行有-O3的代码在这里插入图片描述

#set(C_COMPILE_FLAGS "-Wall -Werror -O3 ${NATIVE_OPT} -DOPENFHE_VERSION=${OPENFHE_VERSION}")
#set(CXX_COMPILE_FLAGS "-Wall -Werror -O3 ${NATIVE_OPT} -DOPENFHE_VERSION=${OPENFHE_VERSION} ${IGNORE_WARNINGS}")

通俗点说“-O3”就是实现代码优化的,而调试在目标位置无法停下的原因就是代码被优化了

结果

在453行处停下
在这里插入图片描述

参考文章
https://zhuanlan.zhihu.com/p/604163308

以下是使用CMakeVSCode中进调试的步骤: 1. 确保已经安装了CMake调试器(例如GDB)。 2. 在项目根目录下创建一个名为`CMakeLists.txt`的文件,并编写CMake配置。 3. 在VSCode中打开项目文件夹,并安装CMake Tools和C/C++插件。 4. 在VSCode的设置中,添加CMake的路径,并在CMake Tools的设置中配置CMake的路径和生成目录。 5. 在VSCode调试选项卡中,创建一个名为`(gdb) Launch`的配置,并设置`program`为可执文件的路径。 6. 在源代码中设置断点,并使用调试器来跟踪程序的执。 下面是一个示例`CMakeLists.txt`文件: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 11) add_executable(MyProject main.cpp) ``` 下面是一个示例的VSCode配置: ```json { "cmake.configureSettings": { "CMAKE_BUILD_TYPE": "Debug" }, "cmake.buildDirectory": "${workspaceFolder}/build", "cmake.configureOnOpen": true, "cmake.generator": "Unix Makefiles", "cmake.path": "/usr/bin/cmake", "cmake.sourceDirectory": "${workspaceFolder}", "cmake.toolsPath": "/usr/bin", "cmake.useCMakeServer": true, "cmake.configureArgs": [ "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" ], "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", "C_Cpp.default.compilerPath": "/usr/bin/g++", "C_Cpp.default.includePath": [ "${workspaceFolder}/**" ], "C_Cpp.default.intelliSenseMode": "gcc-x64", "C_Cpp.default.browse.path": [ "${workspaceFolder}" ], "C_Cpp.default.browse.limitSymbolsToIncludedHeaders": true, "C_Cpp.default.browse.databaseFilename": "" } ``` 下面是一个示例的`launch.json`文件: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/MyProject", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb" } ] } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值