CodeLLDB 调试器使用完全指南
前言
CodeLLDB 是一个强大的 LLDB 调试器扩展,专为 Visual Studio Code 设计。它提供了丰富的调试功能,支持多种编程语言,包括 C、C++、Rust 等。本文将详细介绍 CodeLLDB 的核心功能和使用方法,帮助开发者充分利用这个工具进行高效的代码调试。
基础调试配置
启动新调试会话
要开始调试,首先需要创建一个启动配置。以下是一个最基本的配置示例:
{
"name": "启动调试",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/<可执行文件>",
"args": ["-参数1", "-参数2"]
}
关键配置属性说明:
- name: 配置名称,显示在运行和调试面板中
- type: 必须设置为 "lldb"
- request: 调试启动方式,可以是 "launch"(启动新进程)或 "attach"(附加到现有进程)
- program: 可执行文件路径
启动新进程
当选择 "launch" 方式时,可用的额外配置属性:
| 属性 | 类型 | 说明 | |------|------|------| | program | 字符串 | 可执行文件路径(必需) | | args | 字符串/数组 | 命令行参数 | | cwd | 字符串 | 工作目录 | | env | 对象 | 环境变量 | | stdio | 多种 | 标准输入/输出重定向 | | terminal | 字符串 | 终端类型(console/integrated/external) |
附加到现有进程
当选择 "attach" 方式时,可用的额外配置属性:
| 属性 | 类型 | 说明 | |------|------|------| | program | 字符串 | 可执行文件路径(可选) | | pid | 数字 | 要附加的进程ID | | waitFor | 布尔值 | 等待进程启动 |
高级调试功能
标准输入/输出重定向
通过 stdio
属性可以灵活控制调试程序的输入输出:
"stdio": [null, "log.txt", null] // stdin和stderr使用默认终端,stdout输出到文件
远程调试
CodeLLDB 支持通过 LLDB 服务器进行远程调试:
- 在远程机器上运行
lldb-server platform --server --listen *:<端口>
- 创建包含以下命令的配置:
"initCommands": [
"platform select remote-linux",
"platform connect connect://<远程主机>:<端口>"
]
反向调试(实验性)
启用反向调试可以回溯程序执行历史:
"reverseDebugging": true
调试外部启动的程序
可以通过特殊格式的 URI 从外部启动调试会话:
code --open-url "vscode://vadimcn.vscode-lldb/launch/command?/path/可执行文件 参数1 参数2"
RPC 服务器
对于更复杂的外部调试场景,可以配置 RPC 服务器:
"lldb.rpcServer": {
"host": "127.0.0.1",
"port": 12345,
"token": "密钥"
}
然后通过客户端连接发送调试配置。
实用技巧
调试 Rust 单元测试
- 在项目根目录创建
.cargo/config
文件:
[target.<当前目标三元组>]
runner = ".cargo/codelldb.sh"
- 创建
.cargo/codelldb.sh
脚本:
#!/bin/bash
code --open-url "vscode://vadimcn.vscode-lldb/launch/command?LD_LIBRARY_PATH=$LD_LIBRARY_PATH&$*"
- 正常执行测试即可自动启动调试
调试构建脚本
在 Rust 项目中,可以这样调试 build.rs:
let url = format!("vscode://vadimcn.vscode-lldb/launch/config?{{'request':'attach','pid':{}}}", std::process::id());
std::process::Command::new("code").arg("--open-url").arg(url).output().unwrap();
std::thread::sleep_ms(1000); // 等待调试器附加
调试器功能
断点类型
- 正则表达式断点:支持使用正则表达式设置断点
- 条件断点:只有当指定条件为真时才会触发
- 数据断点:监视变量或内存地址的变化
表达式求值
支持三种表达式求值模式:
- simple:简单模式
- python:使用 Python 解释器
- native:原生 LLDB 表达式
总结
CodeLLDB 提供了强大而灵活的调试功能,无论是本地开发还是远程调试,都能满足各种复杂场景的需求。通过合理配置启动参数和利用高级功能,开发者可以显著提高调试效率,更快地定位和解决问题。
建议读者根据实际项目需求,尝试不同的配置组合,找到最适合自己工作流程的调试方式。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考