vscode调试c/c++
1. 调试配置选择
-
调试 C 程序:选择
"Debug C Program"(调用gcc编译)。 -
调试 C++ 程序:选择
"Debug C++ Program"(调用g++编译)。
2. 调试步骤
-
打开代码文件:确保当前编辑器打开的是
.c或.cpp文件。 -
设置断点:在代码行号左侧点击设置断点(红点)。
-
启动调试:
-
按
F5或点击左侧调试图标 → 顶部下拉菜单选择调试配置(如Debug C Program)→ 点击绿色箭头启动。
-
-
调试控制:
-
继续(continue, F5):运行到下一个断点。
-
单步调试 / 逐语句(Step Into, F11):进入当前行的函数内部,一步一步执行函数内的代码。
-
单步跳过/逐过程(step over,F10):执行当前行代码,但不进入函数内部,直接跳到下一行。当你不想进入某个函数的内部,只想看它的执行结果。例如,执行
fscanf(inputFile, "%d", &serve_time[i]);时,按F10会直接读取数据,而不会进入fscanf的内部实现。 -
单步跳出(Step Out, Shift+F11):从当前函数中跳出,返回到调用它的地方。当你进入了一个函数(比如
compare),但不想逐行执行完,想直接返回到调用它的地方(比如qsort内部)。 -
查看变量:在调试侧边栏的
VARIABLES区域查看当前变量值。
-
调试示例
假设你在调试这段代码:
qsort(serve_time, n, sizeof(int), compare); // 假设在这里设置断点
for (int i = 0; i < n; i++) {
fscanf(inputFile, "%d", &serve_time[i]);
}
操作示例
-
设置断点:在
qsort行左侧点击,出现红点(断点)。 -
启动调试(
F5),程序会在qsort处暂停。 -
按
F11(Step Into):进入qsort内部(如果有调试信息)。 -
按
Shift+F11(Step Out):跳出qsort,回到主函数。 -
按
F10(Step Over):执行qsort,但不进入内部,直接跳到for循环。 -
按
F5(Continue):继续运行,直到程序结束或下一个断点。
总结
| 操作 | 快捷键(VS Code) | 作用 |
|---|---|---|
| 继续 | F5 |
运行到下一个断点或程序结束 |
| 单步调试(逐语句) | F11 |
进入函数内部 |
| 逐过程 | F10 |
执行当前行,不进入函数 |
| 单步跳出 | Shift+F11 |
跳出当前函数 |
3. 关键验证点
检查编译是否成功
-
调试前会自动执行
preLaunchTask(即tasks.json中的编译任务)。 -
如果编译失败:
-
检查终端输出错误(如语法错误)。
-
确保
gcc/g++命令在终端可直接运行(验证环境变量配置)。
-
检查调试器路径
-
Windows:若使用 MinGW,需将
miDebuggerPath改为绝对路径(如"C:/TDM-GCC-64/bin/gdb.exe")。 -
Linux/macOS:
"gdb"通常可用(确保已安装gdb/lldb)。
检查输出文件路径
-
你的配置将生成
.out文件(如main.c→main.out),需与launch.json的program字段一致。
4. 常见问题解决
调试时显示无法打开文件(例如无法打开inout.txt)
-
在 VS Code 中调试时,默认的工作目录是项目根目录(
D:\myvscode),程序默认会在当前工作目录(即D:\myvscode)下查找input.txt。 -
如果你不确定当前工作目录,可以在代码中打印当前路径:
#include <direct.h> char cwd[1024]; _getcwd(cwd, sizeof(cwd)); printf("当前工作目录: %s\n", cwd);
-
如果你希望程序在其他目录查找文件,可以修改代码中的文件路径,例如:
FILE *inputFile = fopen("D:/myvscode/input.txt", "r"); FILE *outputFile = fopen("D:/myvscode/output.txt", "w");
调试时提示“无法找到 .out 文件”
-
原因:编译失败或路径错误。
-
解决:
-
手动运行编译命令(如
gcc -g main.c -o main.out)确认是否成功。 -
检查
${fileDirname}/${fileBasenameNoExtension}.out路径是否正确。
-
断点未生效
-
确保编译时包含
-g参数(生成调试信息)。 -
重新启动调试会话(有时需清理旧的可执行文件)。
Windows 下终端无输出
-
将
externalConsole改为true(部分 Windows 环境需要外部终端显示输出)。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug C Program",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false, // 改为 false 使用 VSCode 终端
"MIMode": "gdb",
"miDebuggerPath": "gdb", // Windows 改为 "C:/TDM-GCC-64/bin/gdb.exe"
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "gcc build active file" // 编译 C 文件
},
{
"name": "Debug C++ Program",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb", // Windows 改为 "C:/TDM-GCC-64/bin/gdb.exe"
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file" // 编译 C++ 文件
}
]
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "gcc build active file",
"type": "shell",
"command": "gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"group": "build",
"problemMatcher": [
"$gcc"
],
"detail": "编译当前 C 文件"
},
{
"label": "g++ build active file",
"type": "shell",
"command": "g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"group": "build",
"problemMatcher": [
"$gcc"
],
"detail": "编译当前 C++ 文件"
},
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "C:\\TDM-GCC-64\\bin\\gcc.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
]
}
更多推荐
所有评论(0)