2016-08-14 6 views
1

Я получаю segfault («Незаконная операция (core dumped)») для программы python, которую я запускал каждую неделю без сбоев на протяжении веков. Я также запускаю Ubuntu на Nitrous. Я вспоминаю, что занимался этими yonks назад, когда кодировал на C, и мне не пришлось иметь дело с ними очень недавно.urllib3 segfault (core dumped)

Импорт библиотеки urllib3, похоже, вызывает проблему. Кто-нибудь знает исправить?

Кроме того, может ли кто-нибудь посоветовать или связать лучший рабочий процесс для диагностики этих проблем в будущем?

Спасибо!

+0

Просьба указать минимальное, проверяемое, полное пример, чтобы продемонстрировать вашу проблему (http://stackoverflow.com/help/mcve) –

ответ

0

«недопустимая операция»

Это обычно означает, что при выполнении кода, скомпилированный для более способного процессора (например 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, и библиотеку, в которой используется эта команда. Как только вы узнаете, что это за инструкция, вы можете убедиться, что ваш процессор не поддерживает ее, и обратитесь к дистрибьютору «виноватой» библиотеки, чтобы получить другую компиляцию (без использования инструкций, которые не поддерживаются вашим процессором).