Как я могу увидеть вывод printf внутри gdb? - PullRequest
7 голосов
/ 25 марта 2011

Это то, что я пытался, но, кажется, не работает:

(gdb) call printf("%d",6)
$8 = 1

Ответы [ 2 ]

10 голосов
/ 25 марта 2011

Вы не можете видеть результат, потому что stdout (FILE *) имеет выходной буфер. Он не будет выводить что-либо на экран, пока буфер не заполнится или не встретится '\ n'.

поэтому вызывайте printf так:

(gdb) call (int)printf("%d\n", 6)
6
$6 = 2

Кстати, «$ 6 = 2», которое является результатом printf .

1 голос
/ 25 марта 2011

Похоже, все работало нормально - printf вернул 1, указывая, что он успешно напечатал один символ на стандартный вывод.

Обратите внимание, что стандартный вывод не обязательно отображается на том же терминале, на котором запущен GDB - он будет отображаться везде, где отлаживаемая программа имеет стандартный вывод (это так же, как если бы сама программа вызывала printf() - команда call в gdb вызывает функцию в контексте программы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...