4

我将我的临时字符串打印到标准输出:

printf "%s", nodeToString(myNode)

但我想将此字符串打印到文件中。

我尝试了此处所述的解决方案,但 printf 结果仍会输出到标准输出。

编辑:澄清 cIph3r 的答案。

这是我在命令行上尝试的:

$ gdb 

(gdb) attach 23053

(gdb) printf "%s", nodeToString(myNode)  // This works and outputs to screen

(gdb) run printf "%s", nodeToString(myNode) > outputfile  // I get this warning
The program being debugged has been started already.
Start it from the beginning? (y or n) 
4

1 回答 1

4

gdb 可以像 bash 一样执行流水线操作,但我只知道如何从命令行使用 gdb。

首先,运行 gdb 并告诉它应该调试什么:

gdb ./prog

然后在gdb中,你可以运行程序run

run 

在这里你也可以使用 argumetns 运行它:

run argv1 argv2

但您也可以使用 bash-pipeline 命令运行它:

run > outputfile

这和

./prog > outputfile

但是,如果你想输出 gdb-output,比如

(gdb) print "test"
$s1 = "test"

这不是正确的方法。你这样做:

(gdb) set logging on

但请记住,当您要调试的程序正在运行时不要这样做

如果所有这些都不起作用,您可以使用 tee 从 gdb 捕获标准输出并将其重定向到文件:

gdb ./prog | tee output.log

然后 gdb 输出也保存在 output.log 中(但所有标准输出)

退出 gdb 后,有一个名为的文件名,output.log其中包含您在 gdb 中看到的所有内容

于 2013-02-18T16:09:14.100 回答