我正在为一个python程序获得一个段错误(“非法操作(核心转储)”),这个程序我每周都没有错过多年。我也在Nitrous上运行Ubuntu。我记得在使用C语言进行编码时处理这些yonks,我最近没有必要处理它们。
导入库urllib3似乎导致了问题。有谁知道修复?
此外,有人可以建议或链接到将来诊断这些问题的最佳工作流程吗?
谢谢!
答案 0 :(得分:0)
“非法操作”
此通常表示您正在为功能较弱的处理器(例如Haswell)运行为更强大的处理器(例如Ivy Bridge)而编译的代码(例如AVX)。
导入库urllib3似乎导致了问题。
在我的Ubuntu计算机上,localhost:10080
加载import urllib3
,libssl.so.1.0.0
和libcrypto.so.1.0.0
。这些加密库很可能使用处理器可能不支持的AVX2,{{3}}等指令进行编译。
诊断这些问题的最佳工作流程
您的第一步应该是找出导致_ssl.x86_64-linux-gnu.so
的指令。为此,请运行:
SIGILL
上面的最后两个命令应该为您提供导致gdb python
(gdb) run
>>> import urllib3 # do whatever is necessary to reproduce SIGILL
(gdb) x/i $pc
(gdb) info sym $pc
的指令,以及使用该指令的库。一旦您知道该指令是什么,您就可以验证您的处理器是否支持它,并联系“有罪”库的分发者以获得不同的编译(一个不使用CPU不支持的指令)。 / p>