You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDB调试程序崩溃重启时遇退出确认阻塞的Bash脚本问题

解决GDB退出确认提示问题,实现程序崩溃后自动重启

我完全懂你碰到的这个麻烦——GDB在程序崩溃后退出时弹出的确认询问直接卡住了你的自动重启循环,毕竟脚本没法手动输入y来确认退出。这是因为GDB默认会在存在活跃调试进程时要求确认退出,咱们只需要调整GDB的命令或者配置就能搞定。

方法1:直接用强制退出的quit命令

把你脚本里的-ex quit改成-ex "quit -y",这个-y参数会让GDB直接确认退出,跳过所有提示:

sudo nice -n $NICE sudo -u $USER expect_unbuffer -p gdb ./silverback.bin -ex r -ex bt -ex "quit -y" 2>&1 | tee debug-logs/gdb-"`date +%Y.%m.%d-%H:%M:%S`"

方法2:全局关闭GDB的确认提示

如果之后你可能用到其他需要确认的GDB操作,可以在启动时添加set confirm off命令,一次性关闭所有确认提示:

sudo nice -n $NICE sudo -u $USER expect_unbuffer -p gdb ./silverback.bin -ex "set confirm off" -ex r -ex bt -ex quit 2>&1 | tee debug-logs/gdb-"`date +%Y.%m.%d-%H:%M:%S`"

额外优化:关闭分页避免日志卡顿

如果你的程序崩溃后的backtrace很长,GDB可能会弹出--More--的分页提示,也会卡住脚本。可以再加一个set pagination off命令来关闭分页,完整的循环脚本如下:

while :; do
    echo "Starting silverback.bin..."
    sudo nice -n $NICE sudo -u $USER expect_unbuffer -p gdb ./silverback.bin -ex "set confirm off" -ex "set pagination off" -ex r -ex bt -ex quit 2>&1 | tee debug-logs/gdb-"`date +%Y.%m.%d-%H:%M:%S`"
    echo "Restarting, Ctrl-C to exit"
    sleep 7
done

为什么原来的脚本会卡住?简单说,程序崩溃后GDB的调试进程(inferior)还处于活跃状态,默认的quit命令会询问是否要终止该进程,而自动化脚本无法响应这个交互,导致循环中断。上面的两种方法都能绕过这个确认步骤,让脚本顺利进入下一次重启。

内容的提问来源于stack exchange,提问作者IgorZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:53:34