Я подключен к программе с GDB в OSX, и я хочу использовать CFShow
в консоли GDB и т. Д. Однако ничего не появляется. printf
также ничего не показывает:
(gdb) call (int) printf("Hello\n")
$10 = 6
(gdb) call (int) printf("Hello World!\n")
$11 = 13
Apple предлагает следующий совет для подключения к gdb, чтобы вывод отображался в консоли gdb:
(gdb) call (void) close(1)
(gdb) call (void) close(2)
(gdb) shell tty
/dev/ttyp1
(gdb) call (int) open("/dev/ttyp1", 2, 0)
$1 = 1
(gdb) call (int) open("/dev/ttyp1", 2, 0)
$2 = 2
В консоли gcode xcode tty
выдает "not a tty
", поэтому я попробовал это в gdb в терминале. Там tty
работает, но после перенаправления стандартного вывода все еще нет вывода. Также нет вывода, если я направляю стандартный вывод в файл ..: /
Любое спасение?
Обновление / More-подробности
В некоторых программах (например, TextMate) этот метод работает. Приложение, которое я пытался отладить, /Developer/Applications/Audio/AU\ Lab.app
. По какой-то причине этот трюк не работает там ..
Обновление: кажется, реальное объяснение довольно:
Если после подключения я перенаправляю стандартный вывод перед вызовом printf
в первый раз, это работает! Если я сначала printf
и только потом перенаправляю вывод, вывод отображается только после выполнения printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n")
и последующего нажатия Enter (для повторения последней команды) 327 раз.
Так что я думаю, что перенаправление stdout каким-то образом приводит в замешательство libc и заставляет его по какой-то причине использовать буфер размером 2**14
байтов?