Изоляция фрагментов кода, которые сегфо - PullRequest
2 голосов
/ 18 июля 2011

У меня есть вызов функции, который иногда вызывает ошибку. Прямо сейчас я изолирую этот код, поместив его в отдельный файл Python и выполнив Popen('python snippet.py') внутри моего основного скрипта. Есть ли более элегантный способ сделать это в системе Unix?

Обновление 7/24

Мне показалось удобным следующее

if not os.fork():
  # do stuff that could segfault here

Преимущество этого состоит в том, что не нужно помещать весь код инициализации в отдельный файл. Очевидно, в Python 2.6 есть также модуль multiprocessing, который поддерживает межпроцессное взаимодействие

1 Ответ

0 голосов
/ 23 июля 2011

Почему бы не найти и не починить?

strace python yourapp.py yourargs and options >trace.out 2>&1

Затем, после segfaults, попробуйте tail -50 trace.out, и вы увидите, как это приводит к segfault. Обычно это искаженный указатель, указывающий на адреса памяти, которые не являются частью процесса. Для ошибки Python вполне возможно создать такие ошибки указателя, если вы используете что-то вроде ctypes для доступа к общим библиотекам.

I

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...