调试时查看文件输出

时间:2011-08-22 08:58:41

标签: c debugging file

在调试模式下将输出重定向到文件的问题是,在程序完成之前,我无法查看文件内容(大小为零)。有了这个用法:

FILE *f;
f = fopen("log.txt", "w");
fprintf(f, "cycle =%d\n", c);

在调试时,我想在单步执行“fprintf”语句后立即查看文件中的“cycle =”。

有没有办法做到这一点?

5 个答案:

答案 0 :(得分:2)

虽然我在C99中没有看到它,但setlinebuf()是一个在任何需要的CI中都可用的函数。在第一次输出到文件之前调用setlinebuf()强制每个使用“线缓冲”立即出去。

f = fopen("log.txt", "w");
if ( !f )
   oops();
if ( debugging_mode )
    setlinebuf( f );

无需单独调用fflush(),fsync()等

注意这会减慢执行大量输出的程序,因此将其保留用于调试模式对于某些程序的性能非常重要。

如果您没有setlinebuf(),请尝试以下操作,即C99:

   setvbuf(f, (char *)NULL, _IOLBF, 0);

答案 1 :(得分:1)

您可以尝试在fflush(f);函数调用之后放置fprintf(),这将使数据立即被写入。

答案 2 :(得分:0)

使用fsync

FILE *f;
f = fopen("log.txt", "w");
fprintf(f, "cycle =%d\n", c);
fsync(f);

答案 3 :(得分:0)

在调用fprintf之后添加fflush(f)应确保输出对其他程序可见(尽管不一定写入磁盘)。

如果这是您不能或不想修改的代码,并且您正在使用GDB进行调试,则可以让调试器使用call fflush(f)为您调用fflush。

答案 4 :(得分:0)

看看这是否有帮助 - How to monitor log files in real-time?