如何在GDB中通过Pipe命令处理Stderr输出?
GDB pipe命令输出捕获测试与疑问
测试过程
先定义包含三种输出场景的GDB命令testgdbcmd:
define testgdbcmd !echo "echo to stdout" !>&2 echo "echo to stderr" echo "gdb echo" end
执行测试的GDB会话记录:
(gdb) define testgdbcmd Type commands for definition of "testscript". End with a line saying just "end". >!echo "echo to stdout" !>&2 echo "echo to stderr" >echo "gdb echo" >end (gdb) pipe testgdbcmd | bash -c 'cat - > /tmp/testgdbcmd.txt' echo to stdout echo to stderr (gdb) !cat /tmp/testgdbcmd.txt "gdb echo"(gdb)
测试结论
通过!调用的Shell子进程,其向stdout或stderr的输出不受GDB的pipe命令处理;只有GDB自身输出命令(如echo)的内容会被pipe捕获并传入管道。
疑问
- 是否存在可指定输出到stdout或stderr的GDB打印命令?查阅
(gdb) help echo和(gdb) help printf的说明,未找到相关内容。 - 若某GDB命令同时向stdout和stderr输出,
pipe仅能捕获stdout的输出,无法捕获stderr。有没有办法通过GDB的pipe命令,将命令的stderr输出重定向至stdout后再进行管道传输?类似Bash中cmd 2>&1 | ...的写法,但直接套用在pipe中无效。
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

