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

GDB批量命令执行异常:thread apply all bt full参数失效问题

问题原因

直接将带空格和引号的命令存入变量后用$cmd执行时,Shell的参数拆分机制会破坏原有的参数边界:

  • 命令行直接输入时,单引号是Shell语法,会把thread apply all bt full整体作为-ex的参数传递给gdb。
  • 存入变量再展开时,Shell会忽略单引号的语法作用,将'thread、apply、all、bt、full'拆分成独立参数,导致gdb收到错误的指令,从而出现"apply: No such file or directory"等报错。
解决方法

方法1:使用数组存储命令(推荐,安全可靠)

用数组保存每个独立的命令参数,展开时能完整保留参数边界:

# 定义数组,每个元素对应一个命令参数
cmd=(/usr/bin/gdb -q --batch -ex 'thread apply all bt full' /proc/8969/exe /tmp/core.xxx)
# 执行数组中的命令并捕获输出
ret=$("${cmd[@]}")

方法2:使用eval执行(谨慎使用,仅当变量内容完全可信时)

eval会重新解析命令字符串,恢复Shell的引号处理逻辑:

cmd="/usr/bin/gdb -q --batch -ex 'thread apply all bt full' /proc/8969/exe /tmp/core.xxx"
ret=$(eval "$cmd")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:40:26