我得到了一个segfault(“非法操作(核心转储)”)的python程序,我已经运行了好几年了,每周都没有错误。我还在Nitrous上运行ubuntu。我记得我以前用C编写代码的时候和这些人打过交道,而最近我不需要太多地和他们打交道。
导入库urllib3似乎是导致此问题的原因。有人知道解决办法吗?
另外,是否有人可以建议或链接到将来诊断这些问题的最佳工作流?
谢谢!

最佳答案

“非法操作”
这通常意味着您要在功能较弱的处理器(如Haswell)上运行为功能较强的处理器(如Ivy Bridge)编译的代码。
导入库urllib3似乎是导致此问题的原因。
在我的ubuntu机器上,import urllib3加载libssl.so.1.0.0libcrypto.so.1.0.0_ssl.x86_64-linux-gnu.so。这些密码库很可能是用处理器可能不支持的AVXAVX2等指令编译的。
诊断这些问题的最佳工作流
第一步应该是找出导致SIGILL的指令。为此,请运行:

gdb python
(gdb) run
>>> import urllib3  # do whatever is necessary to reproduce SIGILL
(gdb) x/i $pc
(gdb) info sym $pc

上面最后两个命令应该给出导致SIGILL的指令以及使用该指令的库。一旦你知道指令是什么,你就可以验证你的处理器不支持它,并联系“有罪”库的发行商获得一个不同的编译(一个没有使用CPU不支持的指令的编译)。

关于python - urllib3 segfault(核心已转储),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38938381/

10-13 06:59