CodeLLDB 调试器使用完全指南

CodeLLDB 调试器使用完全指南

codelldb A native debugger extension for VSCode based on LLDB codelldb 项目地址: https://gitcode.com/gh_mirrors/co/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 服务器进行远程调试:

  1. 在远程机器上运行 lldb-server platform --server --listen *:<端口>
  2. 创建包含以下命令的配置:
"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 单元测试

  1. 在项目根目录创建 .cargo/config 文件:
[target.<当前目标三元组>]
runner = ".cargo/codelldb.sh"
  1. 创建 .cargo/codelldb.sh 脚本:
#!/bin/bash
code --open-url "vscode://vadimcn.vscode-lldb/launch/command?LD_LIBRARY_PATH=$LD_LIBRARY_PATH&$*"
  1. 正常执行测试即可自动启动调试

调试构建脚本

在 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); // 等待调试器附加

调试器功能

断点类型

  1. 正则表达式断点:支持使用正则表达式设置断点
  2. 条件断点:只有当指定条件为真时才会触发
  3. 数据断点:监视变量或内存地址的变化

表达式求值

支持三种表达式求值模式:

  • simple:简单模式
  • python:使用 Python 解释器
  • native:原生 LLDB 表达式

总结

CodeLLDB 提供了强大而灵活的调试功能,无论是本地开发还是远程调试,都能满足各种复杂场景的需求。通过合理配置启动参数和利用高级功能,开发者可以显著提高调试效率,更快地定位和解决问题。

建议读者根据实际项目需求,尝试不同的配置组合,找到最适合自己工作流程的调试方式。

codelldb A native debugger extension for VSCode based on LLDB codelldb 项目地址: https://gitcode.com/gh_mirrors/co/codelldb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/502b0f9d0e26 计算机体系结构是计算机科学与技术领域极为关键的课程,它聚焦于硬件与软件的交互以及计算系统设计优化的诸多方面。国防科技大学作为国内顶尖工科院校,其计算机体系结构课程备受瞩目。本课件汇集了该课程的核心内容,致力于助力学生深入探究计算机工作原理。 课件内容主要涵盖以下要点:其一,计算机基本组成,像处理器(CPU)、内存、输入/输出设备等,它们是计算机硬件系统基石,明晰其功能与工作模式对理解计算机整体运行极为关键。其二,指令集体系结构,涵盖不同指令类型,如数据处理、控制转移指令等的执行方式,以及 RISC 和 CISC 架构的差异与优劣。其三,处理器设计,深入微架构设计,如流水线、超标量、多核等技术,这些是现代处理器提升性能的核心手段。其四,存储层次结构,从高速缓存到主内存再到外部存储器,探究存储层次缘由、工作原理及数据访问速度优化方法。其五,总线和 I/O 系统,学习总线协议,了解数据、地址、控制信号在组件间传输方式,以及 I/O 设备分类与交互方式,如中断、DMA 等。其六,虚拟化技术,讲解如何利用虚拟化技术使多个操作系统在同硬件平台并行运行,涉及虚拟机、容器等概念。其七,计算机网络与通信,虽非计算机体系结构主体,但会涉及计算机间通信方式,像 TCP/IP 协议栈、网络接口卡工作原理等。其八,计算机安全与可靠性,探讨硬件层面安全问题,如物理攻击、恶意硬件等及相应防御举措。其九,计算机体系优化,分析性能评估指标,如时钟周期、吞吐量、延迟等,学习架构优化提升系统性能方法。其十,课程习题与题库,通过实际题目训练巩固理论知识,加深对计算机体系结构理解。 国防科大该课程不仅理论扎实,还可能含实践环节,让学生借助实验模拟或真实硬件操作深化理解。课件习题集为学习者提供丰富练习机会,助力掌握课程内容。共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣铖澜Ward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值