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

Debugging a segmentation fault when calling a third party executable

本文关键字:分段 错误 调试 第三方 可执行文件 调用      更新时间:2023-10-16

在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或其他什么方式,向第三方供应商了解问题的原因?

我们使用strace 找到了答案

特别是

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

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

你难道不知道吗,就在分割错误之前。。。。程序正在查找一个不存在的日志文件。我们添加了那个日志,bam不再有seg错误。