Я понял, почему это происходит. Когда GDB запускается через терминал, STDOUT буферизуется строкой, что означает, что он будет сбрасываться каждый раз при чтении новой строки, что приводит к ожидаемому поведению.
ОДНАКО! Eclipse CDT запускает GDB с STDOUT в режиме блочной буферизации, что означает, что он будет сбрасывать STDOUT, только когда достигнет определенного размера, или если он сбрасывается вручную Поскольку строка "!!! Hello World !!!" так коротко, буфер для STDOUT никогда не будет сброшен, пока не будет сделан вызов fflush()
.
Мне удалось решить эту проблему, добавив fflush(stdout);
после вызова puts()
.
Вот полученный код:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World!"); /* prints !!!Hello World!!! */
fflush(stdout);
return EXIT_SUCCESS;
}