C gdb打印到文件
我使用此命令将临时字符串打印到标准输出:C gdb打印到文件,c,debugging,redirect,gdb,printf,C,Debugging,Redirect,Gdb,Printf,我使用此命令将临时字符串打印到标准输出: 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)
但是我想把这个字符串打印到一个文件中
我尝试了解决方案声明,但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)
gdb可以像bash一样执行流水线 但我只知道如何从命令行使用gdb 首先,运行gdb并告诉它应该调试什么:
gdb ./prog
然后在gdb中,您可以使用run
run
在这里,您还可以使用argumetns运行它:
run argv1 argv2
但您也可以使用bash管道命令运行它:
run > outputfile
这和
./prog > outputfile
然而,如果您想要输出gdb输出,比如
(gdb) print "test"
$s1 = "test"
这不是正确的方法。您可以这样做:
(gdb) set logging on
但是请记住,当您想要调试的程序正在运行时,不要这样做
如果所有这些都不起作用,您可以使用tee从gdb捕获标准输出并将其重定向到一个文件:
gdb ./prog | tee output.log
然后gdb输出也保存在output.log中(但所有stdout)
退出gdb后,有一个名为
output.log
的文件名,其中包含了您在gdb中看到的所有内容我不知道如何执行此操作,我从emacs运行gdb,并在gdb shell中使用attach命令添加要调试的程序。你能说得更具体一点吗?好的,我误解了你的问题,认为printf是调试的代码确保在程序未运行时设置loggin,但请记住,在要调试的程序正在运行时不要这样做,为什么?我就这么做了,得到了我需要的输出。gdb 7.9