如何在GDB会话中按序加载双程序并避免远程设备重置?
问题分析
你的核心问题在于:
- 原脚本中切换inferior后重复执行
target extended-remote,这会强制断开原有远程连接并重建,直接导致设备重置。 - 未在第一个程序中设置断点,
run命令会直接执行完progA,根本不会触发断点事件就进入后续步骤。
解决方案
要实现“第一个程序触发断点后再加载运行第二个程序”且不重置设备,关键是复用已建立的远程连接,并确保断点触发后再切换inferior处理第二个程序。以下是修正后的脚本:
gdb -batch -l 20 \ -ex "target extended-remote localhost:3333" \ # 为第一个程序创建inferior并加载 -ex "add-inferior -exec ${progA}" \ -ex "inferior 1" \ -ex "load" \ # 在第一个程序的目标位置设置断点(替换为你实际需要的断点,比如main函数) -ex "break main" \ # 运行第一个程序,直到断点触发 -ex "run" \ # 创建第二个程序的inferior,复用已有远程连接 -ex "add-inferior -exec ${progB}" \ -ex "inferior 2" \ -ex "load" \ # 运行第二个程序 -ex "run" \ # 可选:若需继续执行第一个程序,可添加以下两行 # -ex "inferior 1" \ # -ex "continue"
关键细节说明
- 复用远程连接:仅在会话起始执行一次
target extended-remote,后续所有inferior共享该连接,避免重复连接引发设备重置。 - 断点控制流程:必须为第一个程序明确设置断点,
run命令会在断点处暂停,此时再切换到第二个inferior执行后续操作。 - inferior上下文切换:通过
inferior <编号>精准切换操作对象,确保每个命令对应正确的程序。
内容的提问来源于stack exchange,提问作者Riotshielder21
相关产品推荐
相关产品推荐

