我试图找出我在c ++ poco 代码中出错的地方。在Ubuntu 14上运行时,程序运行正常,但是当通过 gnueabi 重新编译 arm 时,它只是与sigsegv崩溃:
这是来自堆栈跟踪的报告(它落在哪里):
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(8888), sin_addr=inet_addr("192.168.2.101")}, 16) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x6502a8c4} ---
+++ killed by SIGSEGV +++
这是代码(它应该连接到tcp服务器):
this->address = SocketAddress(this->host, (uint16_t)this->port);
this->socket = StreamSocket(this->address); // !HERE
请注意,我正在捕捉任何异常(例如econnrefused),并且当它无法连接时它会正常死亡。当它连接到服务器端时,它就会崩溃。
当尝试启动valgrind时,它会因错误而中止。不知道影子记忆范围是什么意思
==4929== Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
http://pastebin.com/Ky4RynQc这里是完整日志
谢谢
答案 0 :(得分:0)
不知道为什么,这在ubuntu上编译得很糟糕,但是当在fedora上编译时(相同的脚本,相同的构建设置,相同的gnu),它正在工作。
谢谢你们的评论。