0

在 Rhel5 上,我在调用第三方 C++ 可执行文件时遇到分段错误。

不幸的是,我无法在启用了调试标志的情况下重新编译这个第三方可执行文件。因此,出于这个原因,不幸的是,来自分段错误的核心转储并没有为我们提供太多信息,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 或其他方式)向第三方供应商获取有关导致问题的信息?

4

1 回答 1

1

我们使用 strace 找到了答案

尤其

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

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

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

于 2013-03-04T19:14:02.153 回答