我附加了一个在OSX中使用gdb的程序,我想使用
CFShow
但是,在gdb控制台等中,没有显示任何内容。
printf
也不显示任何内容:
(gdb) call (int) printf("Hello\n")
$10 = 6
(gdb) call (int) printf("Hello World!\n")
$11 = 13
苹果建议
the following tip
当与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
在Xcode的gdb控制台中
tty
给予“
not a tty
“,所以我在一个终端的gdb中尝试过。那里
TTY
确实有效,但是在重定向stdout之后仍然没有输出。如果我将stdout指向一个文件,也没有输出。:
有救恩吗?
更新/更多详细信息
:
在某些程序(如textmate)上,此方法确实有效。我尝试调试的应用程序是
/Developer/Applications/Audio/AU\ Lab.app
. 出于某种原因,这个把戏在那里不起作用。
更新:似乎真正的解释是:
如果在附加后,我在调用前重定向stdout
普林特
第一次成功了!如果我第一次
普林特
只有这样才能重定向输出,只有在完成后才会显示输出
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n")
然后按Enter(重复上一个命令)327次。
所以我想重定向stdout会让libc困惑,并使其使用缓冲区
2**14
字节有什么原因吗?