在Rhel5上,我在调用第三方C ++可执行文件时遇到分段错误。
不幸的是,我没有能力在启用DEBUG标志的情况下重新编译第三方可执行文件。因此,遗憾的是,来自分段错误的核心转储并没有为我们提供太多信息,无论是gdb还是valgrind都没有。
例如,这是valgrind:
==4074== Process terminating with default action of signal 11 (SIGSEGV)
==4074== Access not within mapped region at address 0x7158E7F7
==4074== at 0x7158E7F7: ???
==4074== by 0x6322203A22656D6E: ???
==4074== by 0x306C675F6E557267: ???
==4074== by 0x202C22373232302F: ???
==4074== by 0x6D616E656C696621: ???
==4074== by 0x72686322203A2264: ???
==4074== by 0x3030306C675F6E54: ???
==4074== by 0x346469702E373231: ???
==4074== by 0x646469662E34372F: ???
==4074== by 0x722E64616568656B: ???
==4074== by 0x63656D6F6C756764: ???
有没有办法,可能通过lsof或其他东西,向第三方供应商提供有关导致问题的原因的信息?
答案 0 :(得分:1)
我们使用strace找到答案
特别是
strace -f -o strace.txt $myPath/bin/XMLForm $* ${MISSING_LOCALE} ORBtraceLevel 40 -ORBtraceThreadId 1
这生成了一个包含所有低级C-API调用的strace.txt文件。
你不知道它,就在分段错误之前......程序正在寻找一个不存在的日志文件。我们添加了log,bam没有更多的seg错误。