vscode对C++程序进行调试
cMake
简单的CMakeLists
1.先编写hello.cpp
# include <iostream>
int main(int argc, char* argv[]){
for(int i = 0 ; i < argc ; i++){
std::cout << argv[i] << std::endl;
}
std::cout << "hello" << std::endl;
return 0;
}
然后写 CMakeLists
cmake_minimum_required(VERSION 3.2)
project(hello)
set(CMAKE_BUILD_TYPE "Debug")
add_executable(hello hello.cpp)
2.然后建立build目录,进,然后执行
cmake ..
make
简单的模板
cmake_minimum_required(VERSION 2.8)
project(AdaptiveMedianFilter)
find_package(OpenCV REQUIRED)
include_directories(${CMAKE_CURRENT_LIST_DIR}/inc)
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src source_path)
add_executable(${PROJECT_NAME} ${source_path})
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
set(CMAKE_CXX_FLAGS "-Wall")
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
注意:“开启调试信息”那里的三行代码必须要有,否则无法对生成的目标文件进行调试。由于我的小项目中使用到了opencv,因此加了”查找包“和“目标链接库”两行代码,若无需要可不加。其他代码可以根据需要自行添加。
3.此时生成了hello程序,可以开始调试
- 先点击vscode的
运行->启动调试
,会生成调试需要的 launch.json 文件 - 然后修改 program 为你要调试的程序
- 然后 启动调试 即可
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/hello",
"args": ["中国 ", " 是一个伟大的国家"],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
4.以上在调试前先用cmake进行编译,然后再调试,很麻烦,可以加一个任务让调试前先自动生成可执行程序
- 在 launch.json 中加入
"preLaunchTask": "build"
- 然后创建 tasks.json ,创建方法鼠标在vs界面中 右键–> 命令面板–> 选择tasks (输入tasks 然后找自己要的 配置生成 的那个),会自动生成模板
- 修改内容, 其中 label 的值一定要和 launch中的 preLaunchTask的值一样
- 修改 “command” 用于在调试之前先生成代码
- 之后点击调试就可以自动进行调试了
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "mkdir build;cd build;cmake ..;make",
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
5.按照以上步骤未成功
在VScode中使用cmake + make 方式调试C++代码时,想要正常进行断点调试,在CMakeLists.txt文件中需要注意以下两点:
- 设置为"Debug"模式:set(CMAKE_BUILD_TYPE “Debug”),如果设置为"Release"模式,设置断点后在调试时是默认无效的,进入调试后,断点会变为空心断点,程序不会在任何断点处停下。
- 取消代码编译优化:一定要注释掉set(CMAKE_CXX_FLAGS “-O3”)(或不写),否则“任何级别的优化都将带来代码结构的改变,将会使目标代码的执行顺序变得面目全非,导致调试信息严重不足。”
然后参考
1.修改 launch.json 文件
2.vscode make : 无法将“make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
3.cmake ..
编译报错
以上都还没有解决我的问题
有可能是 MinGW 版本的问题,重新装试一下
ps win环境开发太折磨人了
最后突然就调试成功了
1.删除.vscode文件夹
2.运行->启动调试
3.按提示选择 g++
4.重新装插件,然后就好了
贼离谱
参考
1.vscode对C++程序进行调试
2.解决在VScode中调试C++代码断点无效、断点错位的问题
3.Linux下使用VS Code + CMake 调试c++程序
4.VS Code之C/C++程序的调试(Debug)功能简介
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)