调用第三方可执行文件时调试分段错误

时间:2013-02-22 12:18:27

标签: c++ gdb segmentation-fault

在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或其他东西,向第三方供应商提供有关导致问题的原因的信息?

1 个答案:

答案 0 :(得分:1)

我们使用strace找到答案

特别是

strace -f -o strace.txt $myPath/bin/XMLForm $* ${MISSING_LOCALE} ORBtraceLevel 40 -ORBtraceThreadId 1

这生成了一个包含所有低级C-API调用的strace.txt文件。

你不知道它,就在分段错误之前......程序正在寻找一个不存在的日志文件。我们添加了log,bam没有更多的seg错误。