我得到了一个segfault(“非法操作(核心转储)”)的python程序,我已经运行了好几年了,每周都没有错误。我还在Nitrous上运行ubuntu。我记得我以前用C编写代码的时候和这些人打过交道,而最近我不需要太多地和他们打交道。
导入库urllib3似乎是导致此问题的原因。有人知道解决办法吗?
另外,是否有人可以建议或链接到将来诊断这些问题的最佳工作流?
谢谢!
最佳答案
“非法操作”
这通常意味着您要在功能较弱的处理器(如Haswell)上运行为功能较强的处理器(如Ivy Bridge)编译的代码。
导入库urllib3似乎是导致此问题的原因。
在我的ubuntu机器上,import urllib3
加载libssl.so.1.0.0
、libcrypto.so.1.0.0
和_ssl.x86_64-linux-gnu.so
。这些密码库很可能是用处理器可能不支持的AVX、AVX2等指令编译的。
诊断这些问题的最佳工作流
第一步应该是找出导致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/