您现在的位置是:首页 >其他 >Visual Studio Code调试C/C++程序技巧网站首页其他
Visual Studio Code调试C/C++程序技巧
简介Visual Studio Code调试C/C++程序技巧
终端命令行调试
使用GDB在Linux命令行界面调试程序,主要有下面两种方法:
- 用
gdb --args
直接拉起程序; - 用
gdb attach <pid>
直接attach到运行的进程调试;
这两种方法对应到VS code都有图形化的调试方法,也十分的方便。
VS code图形界面调试
使用一个test工程来简要说明。test的project工程目录结构如下:
test
├── .vscode
│ ├── launch.json
│ └── tasks.json
├── a.out
└── main.c
源码和相关的VS code的配置内容分别如下:
main.c
:
#include <stdio.h>
int main(int argc, char* argv[]) {
if (argc != 4) {
printf("Usage: %s arg1 arg2 arg3
", argv[0]);
return 1;
}
printf("Parameter 1: %s
", argv[1]);
printf("Parameter 2: %s
", argv[2]);
printf("Parameter 3: %s
", argv[3]);
return 0;
}
tasks.json
:
{
"version": "2.0.0",
"tasks": [
{
"label": "build", // label 属性为任务的唯一的字符串标识符,方便被引用
"type": "shell",
"command": "gcc -g main.c",
}
]
}
launch 模式调试
launch.json
:
{
"version": "0.2.0",
"configurations": [
{
"name": "GDB Launch",
"MIMode": "gdb", // MI(Machine Interface)
"type": "cppdbg", // 依赖VS code的C/C++ extension插件
"request": "launch", // 启动程序并调试
"preLaunchTask": "build", // 关联 task 中的 label 属性
"program": "${workspaceFolder}/a.out",
"args": ["arg1", "arg2", "arg3"], // 每个参数要分开,不能写成"arg1 arg2"这种形式
"cwd": "${workspaceFolder}",
}
]
}
然后就可以,在文件中打断点,直接F5
启动调试,或者点击左侧调试按钮启动调试即可。
这里有个注意点,就是程序的命令行参数,一定要分开,写到数组里,这个跟从命令行启动不同,shell会按照空格来解析一个个传递给目标程序,而vscode就是直接按照这个结构化的数据传递给程序了。那么有没有其他方法呢,就是使用gdb拉起后传参的配置方法,按照下面来改写 launch.json
即可:
{
"version": "0.2.0",
"configurations": [
{
"name": "GDB Launch",
"MIMode": "gdb",
"type": "cppdbg",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/a.out",
"cwd": "${workspaceFolder}",
"setupCommands": [
{
"description": "设置命令行参数",
"text": "set args arg1 arg2 arg3" // 把程序的命令行参数写到一行
}
]
}
]
}
如果想通过一个bash脚本来拉起程序调试,这种VS code是不支持的,因为这种本质你调试的是bash这个可执行文件。
attach模式调试
对标 gdb attach <pid>
这种方法,配置按照如下修改,F5
执行后会让你选对应函数的pid,attach调试。
{
"version": "0.2.0",
"configurations": [
{
"name": "GDB Launch",
"MIMode": "gdb",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/a.out",
}
]
}
通过命令启动程序后,可以直接用 ps
等命令查出来 pid
, 然后调试的时候直接就在弹窗选中对应进程了,也十分方便。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。