我有一个非常打印数据结构的函数,它的函数原型是:
void print_mode(FILE *fp, Mode *mode);
FILE *允许您将输出重定向到您想要的任何位置,例如stdout,stderr,文件等。模式是数据结构
我试图在gdb中调用此函数,并希望将输出定向到gdb控制台窗口,stdout?
我试过了:
(gdb) p print_mode(STDOUT,fragment_mode)
No symbol "STDOUT" in current context.
(gdb) p print_mode(stdout,fragment_mode)
$17 = void
两者都不起作用
如何获得要在gdb控制台中显示的函数输出的任何想法?
应该添加 - 我在linux下的emacs 24.2.1中使用gdb
答案 0 :(得分:1)
STDOUT
似乎是宏,gdb不知道,因为预处理器在complilation之前处理过。
使用stdout
可以胜任。
然而,函数print_mode()
似乎没有打印出来。
根据正在调试的程序打印到控制台的内容,gdb的命令print
和call
应该没有区别。
有关详细信息,您可以在此处阅读:https://sourceware.org/gdb/onlinedocs/gdb/Calling.html
问题可能是默认情况下stdout
是行缓冲的,因此在检测到换行符之前输出不会发生,而print_mode()
可能不会发送换行符(\n
)。
要测试这个,只需使用stderr
作为输出文件,因为后者没有缓冲:
p print_mode(stderr, fragment_mode)
答案 1 :(得分:0)
stdout
确实做到了。
我忘了已经从emacs 23升级到24,gdb的工作方式发生了变化,因为它现在打开了一个单独的缓冲区*input/output of program-name*
,它重定向被调试程序的输出。在以前版本的emacs中,它都显示在相同的单个gdb缓冲区中。
所以我的第二次尝试实际上正在工作,我只是在错误的地方寻找,所以没有看到输出