просмотреть вывод файла при отладке - PullRequest
0 голосов
/ 22 августа 2011

Проблема с перенаправлением вывода в файл в режиме отладки заключается в том, что я не могу просмотреть содержимое файла (размер равен нулю) до завершения программы. С этим использованием:

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

во время отладки я хочу просмотреть трек "cycle =" в файле сразу после вывода оператора "fprintf".

Есть ли способ сделать это?

Ответы [ 5 ]

2 голосов
/ 22 августа 2011

Хотя я не вижу этого в 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 голос
/ 22 августа 2011

Вы можете попытаться поставить fflush(f); после fprintf() вызова функции, что приведет к немедленной записи данных.

0 голосов
/ 22 августа 2011
0 голосов
/ 22 августа 2011

Добавление fflush(f) после вашего вызова fprintf должно гарантировать, что вывод виден другим программам (хотя и не обязательно записывается на диск).

Если это код, который вы не можете или не хотите изменять, и вы отлаживаете с помощью GDB, вы можете заставить отладчик вызвать fflush для вас с помощью call fflush(f).

0 голосов
/ 22 августа 2011

Использование fsync:

FILE *f;
f = fopen("log.txt", "w");
fprintf(f, "cycle =%d\n", c);
fsync(f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...