Visual Studio Code 在.S汇编文件中添加调试断点及功能简介

发布于:2025-04-17 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、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. 条件断点的使用

条件断点允许在满足特定条件时暂停程序。例如,当某个变量的值满足特定条件时,程序才会在此行暂停。设置方法如下:

  1. 右键点击断点,选择“条件”。
  2. 在弹出的对话框中,输入一个表达式(例如:x == 10)。
  3. 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
                },
            ],
        }
    ]
}

网站公告

今日签到

点亮在社区的每一天
去签到