目录
- 一、VS Code汇编文件添加断点
- 二、VS Code断点调试功能简介
- 1. 设置断点
- (1) 单行断点
- (2) 条件断点
- (3) 日志断点
- 2. 查看断点列表
- 3. 调试时的断点控制
- 4. 禁用/启用断点
- 5. 删除断点
- 6. 条件断点的使用
- 7. 多线程调试
- 8. 远程调试
- 9. 调试配置文件
一、VS Code汇编文件添加断点
最近通过VSCode通过QEMU调试汇编代码时,发现不能对 .S 汇编文件里面的代码添加断点,但是 .cpp .h 文件却可以正常添加
于是经过一番摸索,发现可以在在设置里面打开如下选项,就可以愉快的对汇编文件添加断点并调试了
气氛都烘托到这里了,于是简单介绍下VSCode的断点调试功能吧
二、VS Code断点调试功能简介
Visual Studio Code(VS Code)提供了强大的调试功能,下面简单讲讲 VS Code 断点功能
1. 设置断点
在 VS Code 中,通过点击代码行号左侧的灰色区域来设置断点。点击一个行号旁边的灰色区域时,会出现一个红点,表示断点已设置。
(1) 单行断点
点击某一行代码的行号旁边的空白区域,即可设置一个单行断点。
(2) 条件断点
右键点击已设置的断点,可以选择设置条件(例如,在特定变量值为真时暂停)。条件断点可以仅在某些条件满足时暂停程序。
(3) 日志断点
日志断点不会暂停程序,但会在断点触发时输出日志。鼠标移动到行号左边,出现淡红色小点,此时不要左键添加断点,直接按下右键,选择“添加记录点”,然后输入想打印的信息
2. 查看断点列表
在左侧的活动栏中,点击“运行和调试”图标(通常是一个播放按钮),然后点击断点(Bugs 图标),可以看到所有已设置的断点,这可以更方便地管理断点,查看断点的状态(启用或禁用)
3. 调试时的断点控制
在调试过程中,VS Code 提供了多个与断点相关的控制按钮:
- 继续执行:按 F5 或点击“继续”按钮,程序会运行到下一个断点或直到程序结束。
- 单步跳过:按 F10 或点击“单步跳过”按钮,程序会执行当前行代码,并跳过当前行调用的任何函数。
- 单步进入:按 F11 或点击“单步进入”按钮,程序会进入当前行调用的函数,并在函数内部停下。
- 单步跳出:按 Shift + F11 或点击“单步跳出”按钮,程序会跳出当前函数,回到函数调用的地方。
- 重启程序
- 停止程序
4. 禁用/启用断点
可以选择禁用某个断点,而不是完全删除它,这样可以临时停用断点,但在以后仍然可以恢复使用。右键点击断点,可以选择“禁用断点”。
5. 删除断点
- 单个删除:右键点击断点并选择“删除断点”来删除单个断点。
- 全部删除:在“运行和调试”面板中,可以选择删除所有断点。
6. 条件断点的使用
条件断点允许在满足特定条件时暂停程序。例如,当某个变量的值满足特定条件时,程序才会在此行暂停。设置方法如下:
- 右键点击断点,选择“条件”。
- 在弹出的对话框中,输入一个表达式(例如:
x == 10
)。 - 当
x == 10
时,程序将暂停。
7. 多线程调试
VS Code 也支持调试多线程程序,支持在调试过程中查看每个线程的状态,并设置断点仅在特定线程中触发。
8. 远程调试
在远程主机上调试程序,设置断点的方法和本地调试一样,只是调试器连接到远程环境
9. 调试配置文件
VS Code 使用 launch.json
文件来配置调试器的行为,可以在 .vscode
文件夹中编辑 launch.json
,为不同的调试场景设置断点、环境变量、调试端口等
下面的 launch.json
配置了通过连接QEMU进行调试
{"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "${workspaceRoot}/os.elf","args": [],"stopAtEntry": false,"cwd": "${workspaceRoot}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "x86_64-elf-gdb","miDebuggerServerAddress": "127.0.0.1:1234","targetArchitecture": "x86","stopAtConnect": true,// 启动gdb之前,做些准备:写映像文件、启动qemu"windows": {"preLaunchTask": "启动qemu", // 仅在windows下可自动运行},"linux": {"preLaunchTask": "启动qemu", // 仅在windows下可自动运行"miDebuggerPath": "gdb", // linux下的特殊配置},"customLaunchSetupCommands": [],"setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true},// 设置体系结构: i8086,方便以16位方式进行反汇编{"description": "设置体系结构","text": "-gdb-set arch i8086","ignoreFailures": true}],// gdb连接后的设置"postRemoteConnectCommands": [ {"description": "运行至0x7c00","text": "-exec-until *0x7c00","ignoreFailures": false},],}]
}