Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C gdb打印到文件_C_Debugging_Redirect_Gdb_Printf - Fatal编程技术网

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