lager diagnose <net> --box <box> [--type <role>] 对异常的仪器 Net 做一次性诊断。它把手动调试的整套流程(lsof、dmesg、裸 pyvisa 探测、硬件服务内省)压缩成一条 CLI 调用。这条调用返回一个可据以行动的分类:主机侧问题、仪器卡死,或者一切正常。
在 lager 0.20.0 中为 USB-TMC(pyvisa)仪器引入。在 0.28.3 中扩展到诊断
debug Net(SEGGER J-Link,以及基础的 OpenOCD/ST-Link 路径)——
请参阅下方的 调试 Net(J-Link)。语法
选项
NET 是要诊断的 Net 名称(例如 battery1、supply1)。
用法
输出各节
USB(主机侧)
来自 Box 端口 9000 上的GET /diagnose/usb。报告:
enumerated—— 该设备是否出现在主机的 USB 总线上?sysfs—— 内核 sysfs 路径(例如/sys/bus/usb/devices/1-4)。device——lsof/fuser使用的/dev/bus/usb/BBB/DDD路径。usbtmc——usbtmc内核模块是否已加载(如果已加载,它会与 libusb 争抢接口 0)。lsof—— 持有该 USB 设备文件的进程列表,形式为command(pid)。dmesg tail—— 最后几条 USB / usbtmc 内核消息。
VISA(仪器侧)
来自 Box 端口 9000 上的GET /diagnose/visa。它打开一个全新的 pyvisa
会话,并以较短的超时查询 *IDN?。如果硬件服务已经为这个地址持有一个共享会话,它会跳过打开动作并说明这一点。发生冲突时,要么会卡住,要么会返回乱码。报告:
idn—— 仪器响应时给出的 IDN 字符串。elapsed—— 实际耗时,单位毫秒。error/error_class—— 分类为busy、nodev、timeout或other。skipped—— 当硬件服务持有该地址时被置位。
Dispatcher(hw_service 进程内)
来自硬件服务端口 8080 上的GET /diagnose/dispatcher。报告该地址在进程内的状态:
cached_session—— 共享的pyvisa会话池中是否有它。cached_drivers—— 针对该地址缓存的驱动实例。shared_pool—— 会话池的总大小。
分类
判定树按以下顺序进行(首个匹配者胜出):会话示例
lager diagnose 会把您指向针对该角色的命令,而不是返回一个会误导人的 UNCLEAR。
调试 Net(J-Link)
debug Net 不是 USB-TMC,因此上面的 pyvisa *IDN? 探测无法触及它。当该 Net 的角色是 debug 时(自动识别,或用 --type debug 强制指定),
lager diagnose 会改走一条了解 J-Link 的路径。它获取同样的主机侧 USB 一节,外加一个专用的 /diagnose/jlink 端点,然后由外向内逐层检查调试栈:软件 → USB → 探针可见性 → gdbserver → 目标连接。这个顺序意味着最具体、最可操作的故障会胜出。
J-Link / 调试探针一节
除 USB(主机侧) 一节之外,debug Net 还会打印一节
J-Link / 调试探针,报告:
backend—— 探针后端(jlink,或某个 OpenOCD/ST-Link 后端)。jlink software—— Box 上是否安装了 SEGGER J-Link 工具。probe enum—— 该探针是否出现在主机的 USB 总线上?probe visible——JLinkExe是否真的枚举到了该探针(带仿真器型号/序列号列表)?holders—— 持有该探针的进程,形式为command(pid)(通常是残留的 gdbserver)。gdbserver—— J-Link gdbserver 是否存活、它的 PID,以及它的日志文件是否正常。connect—— 目标连接探测的结果:connect_ok、错误类别、VTref(目标参考电压),以及识别到的core。当失败无法归类时,会显示JLinkExe的原始输出。
openocd-basic 一节(后端、探针枚举和 gdbserver 状态)——
深入的目标诊断目前只支持 J-Link。
调试相关的分类
调试会话示例
向后兼容
对 0.20 之前的 Box,每个端点都返回 404。此时 CLI 会说明该节不可用,因为那台 Box 可能运行着 lager < 0.20 的镜像。其余各节仍会运行 ——lager diagnose 对较旧的 Box 依然有用,只是信息少一些。
参见
- Instruments —— 列出已连接的仪器及其 VISA 地址
- Nets —— 列出已保存的 Net 及其角色
- Debug —— 调试 Net 的连接、烧录和 gdbserver 控制
- Hello —— 基本的 Box 连通性和版本检查

