Rust in Everything
基于 probe-rs 0.32.0

常见坑

每一章对着一个报错或一个现象:先给出实测的原文,再到源码里找它从哪一行来,最后给出办法。机制在前面各部分讲过的,这里只链过去。复现环境写在每章里,都不需要硬件:本机的 probe-rs 0.32.0、依赖 probe-rs =0.32.0 的实验程序(FakeProbe 或自己写的软件模拟目标)、仓库自带的 coredump 夹具,以及 QEMU 里跑的固件。

  1. Error: No connected probes were found.:Lister 一个设备也没认出来;run、download、info 加 --dry-run 也报,因为走 RPC 的命令先选探针;没权限的探针会被列出、报别的错;cargo-flash 的提示因为错误穿过 RPC 而不出现。
  2. No available hardware breakpoints:FPB 比较器用完;gdb server 把它当致命错误,整个 GDB 会话退出,DAP 只把那个断点标成未验证。
  3. probe-rs run 跑起来了,一行日志也没有:没有 _SEGGER_RTT 符号又没给 --scan-region 时整场不读 RTT;控制块没初始化时每轮重试;两种都只写 debug 日志。
  4. The requested chip 'esp32c3' was not found in the list of known targets.:库用户没注册 probe-rs-espressif 插件,或者注册晚于建 Registry。
  5. ERROR: UNWIND: Failed to read value for register …:按 CFI 读栈失败;更危险的是帧指针坏了但仍指向 RAM,调用栈静默地少帧。
  6. PROBE_RS_TARGETS_DIR 设了,芯片还是找不到:编译期变量,运行时要用 --chip-description-path。
flowchart TB
  sel["选探针"] --> p1["1 No connected probes"]
  reg["按名字查目标"] --> p4["4 esp32c3 not found"]
  reg --> p6["6 TARGETS_DIR 不生效"]
  bp["设断点"] --> p2["2 断点用完"]
  poll["轮询 RTT"] --> p3["3 RTT 静默"]
  uw["栈展开"] --> p5["5 UNWIND 读失败"]

按发生的阶段看:第一、四、六个在 attach 之前(选探针、按名字查目标),第二个在设断点时,第三个在固件跑起来之后,第五个在停下后看调用栈时。

💬 关联讨论

发起讨论
加载中...