Как я могу увидеть вывод printf внутри gdb?

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

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

2 ответов


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

поэтому вызовите printf следующим образом:

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

кстати, "$6 = 2", который является значение printf.


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

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