句柄
方法
RTT 流式传输在同一个句柄上,相关内容见 RTT。
类型
ConnectOptions
Default 把 gdb 设为 true,其余全部关闭,因此 connect() 会启动一个 GDB 服务器。这是唯一一个默认值不是 false 的字段。
FirmwareKind
方法参考
connect() -> Result<DebugConnection>
用 ConnectOptions::default() 连接。
DebugConnection,携带设备、探针、序列号、后端,以及一个带有已打开端口的 GdbServer。在 J-Link 上返回的是 gdb 2331、SWO 2332、telnet 2333 和 RTT telnet 9090。tcl_port 仅 OpenOCD 才有,在 J-Link 上为 None;同理 swo_port 仅 J-Link 才有。
connect_with(opts: &ConnectOptions) -> Result<DebugConnection>
用显式选项连接。
disconnect(keep_running: bool) -> Result<()>
断开连接。传 true 会让 gdbserver 继续运行,供外部 GDB 客户端挂接;传 false 则把它拆掉。
reset(halt: bool) -> Result<()>
复位目标。halt: true 会让它停在复位向量处。
erase() -> Result<()>
整片擦除目标的 Flash。
flash(firmware_path) -> Result<()>
烧录一个文件,按扩展名推断类型:.hex、.elf 或 .bin。无法识别的扩展名会得到 Error::Config。
flash_bin(firmware_path, address: u32) -> Result<()>
在显式的基地址上烧录原始二进制文件。对于应用不是从 0x08000000 开始的任何目标,这都是正确的调用。
flash_bytes(contents: &[u8], kind: FirmwareKind, address: Option<u32>) -> Result<()>
烧录您手上已有的字节,不必先把它们写成文件。address 只对 FirmwareKind::Bin 有用,默认是 0x08000000。
read_memory(address: u64, length: usize) -> Result<Vec<u8>>
从目标的 address 处开始读取 length 个字节。
Error::Box 和 No debugger connection found 失败。
info() -> Result<DebugInfo> 和 status() -> Result<DebugStatus>
info() 报告设备、架构、探针、序列号和后端,以及连接是否存活。status() 只报告 gdbserver:是否有一个在运行、它的 pid,以及探针序列号。两者都不需要先连接。
示例
烧录并校验
为交互式会话保留一个 gdbserver
受支持的硬件
说明
- 超时预算按操作区分,与 CLI 一致:
- connect 30 秒
- flash 180 秒
- erase 120 秒
- 内存读取 30 秒
info、status和disconnect为 10 秒
- Net 解析要求
debug角色。存在但角色不同的 Net 会给出net 'adc1' exists but is not a debug net。不存在的名称会给出debug net 'nosuch' not found on this box。 - 调试服务不使用 9000 端口 API 的那套成功信封格式。200 表示成功;其他任何状态码都是
Error::Box,并携带该服务给出的信息。 - 异步方面的说明:
AsyncDebugNet提供这里的全部功能,但没有 RTT。 - 配置了
allow_destructive: false的 Net 会以Error::Box和 HTTP 403 拒绝erase()和flash()。请参阅 客户端与 Box。

