我使用gdb来调试我的程序,当我解压缩消息并想打印它时,我遇到了问题。看来我可以从终端的命令行打印,但是当程序进入printf("%d has received msg: ", msg->connid);
时,我遇到了问题,
Program received signal SIGSEGV, Segmentation fault.
0xb7ff6301 in ?? () from /lib/ld-linux.so.2
(gdb)n
154 LSPMessage* msg = lspmessage__unpack(NULL, msg_len, buf);
(gdb) n
156 memcpy(pld, msg->payload.data, msg->payload.len);
(gdb) p msg->payload.data
$1 = (uint8_t *) 0x804c038 "Connectedrt,\031"
(gdb) p msg->connid
$2 = 1
(gdb) p msg->payload.len
$3 = 9
174 printf("%d has received msg: ", msg->connid); // required field
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0xb7ff6301 in ?? () from /lib/ld-linux.so.2
答案 0 :(得分:0)
你在解释你实际要问的内容方面做得非常糟糕。
我认为你的问题是:"我的printf电话如何崩溃?"。
可能有几个原因
stdout
或msg->connid
不是int
(因此printf
与"%d"
或由于崩溃是在运行时加载程序中,因此最后一个原因似乎很可能。您可以通过强制加载程序非懒惰地执行symol解析来确认此假设:
(gdb) set env LD_BIND_NOW 1
(gdb) run
它还在崩溃吗?如果没有,请在Valgrind下运行您的程序,并确保解决它报告的所有问题。