使用gdb --args参数时如何正确重定向输出且不丢失被调试程序参数
问题根因
你当前配置的错误点在于:gdb的run命令如果不带任何参数执行,会直接清空你通过--args参数传递给被调试程序的所有入参,仅保留程序自身路径作为argv[0],因此会出现argc=1的异常情况。
另外直接在gdb启动命令后加重定向不生效,是因为这种写法捕获的是gdb自身的输出,而非被调试程序的输出。
修复方案
修改你的gdb.txt配置文件中的run命令,使用gdb内置的$argv变量透传之前通过--args传入的所有参数,同时保留重定向配置即可:
run $argv &> /apps/atlas/runtime/logs/gdbsession_output.log
补充说明
- 配置修改后不需要调整gdb启动命令,你原来的启动命令可以完全保留,所有通过
--args传入的参数都会正常透传给被调试程序 - 如果使用的gdb版本较低不支持
$argv变量,你可以直接把参数补全到run命令之后,对应你的场景写法如下:run -zzinfo ${ZZINFO} &> /apps/atlas/runtime/logs/gdbsession_output.log - 可以通过在main函数入口处打断点,执行
print argc、print argv命令验证参数是否正常传递。
内容的提问来源于stack exchange,提问作者Olav
相关产品推荐
相关产品推荐

