gdb を使用してプログラムをデバッグしていますが、理解できないことが起こっています。
数時間正常に動作した後、プログラムがスタックし、gdb に次の情報が表示されます。
(gdb) bt
#0 0xb7da8021 in write () from /lib/libc.so.6
#1 0xb7d5256f in _IO_file_write () from /lib/libc.so.6
#2 0xb7d52213 in ?? () from /lib/libc.so.6
#3 0xb7d524a6 in _IO_file_xsputn () from /lib/libc.so.6
#4 0xb7d2e31d in ?? () from /lib/libc.so.6
#5 0xb7d29b0e in vfprintf () from /lib/libc.so.6
#6 0xb7d3316f in fprintf () from /lib/libc.so.6
#7 0x080771b6 in print_screen (ws_row=63, ws_col=237, if_num=1) at server.c:8279
#8 0x0807196a in thread_one (arg=0x0) at server.c:5389
#9 0xb7e61f3b in start_thread () from /lib/libpthread.so.0
#10 0xb7db6d0e in clone () from /lib/libc.so.6
(gdb) frame 7
#7 0x080771b6 in print_screen (ws_row=63, ws_col=237, if_num=1) at server.c:8279
8279 fprintf(stderr, " %s", strbuf);
(gdb) p strbuf
$14 = " AKD3384HH", ' ' <repeats 139 times>, "\000", ' ' <repeats 106 times>, '\0' <repeats 255 times>
(gdb)
(gdb) p &strbuf
$15 = (char (*)[512]) 0xb54cee1c
(gdb) info registers
eax 0x6 6
ecx 0xb54cc280 -1253260672
edx 0x96 150
ebx 0x20 32
esp 0xb54ce980 0xb54ce980
ebp 0xb54cf058 0xb54cf058
esi 0x5a 90
edi 0x65 101
eip 0x80771b6 0x80771b6 <print_screen+5914>
eflags 0x200246 [ PF ZF IF ID ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
関数 print_screen で、(明らかに) 有効な引数を指定して fprintf を呼び出すと、どういうわけか、libc が write syscall でスタックします。どこに問題があるのか わかりません。有効な文字列バッファを使用してstderrを書いているだけです..
私はこの問題に腹を立てています。どんな助けや手がかりもいただければ幸いです!!
(この関数 print_screen と fprintf 呼び出しが 5 時間の間正しく機能していることに注意してください)