shiza
Дек. 14, 2007 09:47:30
Есть боооольшой скрипт. Использует несколько внешних сишных модулей (не моих).
Если он достаточно долго работает под нагрузкой - молча валится с segmentation fault.
Насколько я понимаю, с наибольшей долей вероятности - это сишная проблема. То ли модуля какого-то, толи интрепретатора.
Отсмотреть по коду - после какого вызова это проиходит - оочень сложно (оочень много кода =)
Как-бы понять - кто виноват?
P.S. на ум приходят разные мельком слышанные слова - типа stack trace - но в С я слабо шарю. Если дейсвительно нужен этот stack trace - то как его добыть?
ods
Дек. 14, 2007 10:33:30
shiza
P.S. на ум приходят разные мельком слышанные слова - типа stack trace - но в С я слабо шарю. Если дейсвительно нужен этот stack trace - то как его добыть?
Читать документацию gdb на предмет post-mortem dubugging. Если коротко, то:
$ gdb /path/to/python /path/to/core
(gdb) bt
Понятно, что питон и библиотеки должны быть сбраны с отладочной информацией. Без стека бессмысленно что-то предполагать. Но даже с ней может оказаться не всё так просто: падение очень часто происходит не там, где ошибка. В этом случае помогут средства отладки вроде valgrind: он выставляет “защиту” на границах переменных и при обращении к этим местам об этом сообщает, что позволяет поймать ошибку ближе к её месту в коде.
shiza
Дек. 14, 2007 14:43:18
Как все непросто… Попробовал под windows запусить - так-же выпадает. Может под виндовс проще отдебажить это?
ods
Дек. 14, 2007 16:11:52
На самом деле не всё так сложно, как кажется, даже знание C обычно не требуется. В UNIX для такой отладки есть все средства. А вот под Windows я даже не знаю, с какой стороны подойти.
setoy
Дек. 14, 2007 16:20:23
Ето 99% проблем сишние модулы. segmetation fault - ето переполнение какой-то string/ array, индексирование out of range, что-то такое, думаю. Есть вероятность где-то вызываешь С-функция с некорректными параметры вроде длина, граница, что-то такое. Но если так, то ето значит, что внешний модуль не отработать ошибке. Трудное сказать что-то конкретнее, труднее писать по русскому тоже, но если нет С-исходники , то нечего не поделаешь
RDX
Дек. 15, 2007 17:16:43
ods все правильно пишет…
если С модуль сделан ввиде питон-расширения то я фик знат…
НО если это просто библиотека то _точно_ можно отдебежить только ее.
Процесс получае sigsegv в момент обращения к невалидному участку памяти.
А вот почему он таким стал…
shiza
Дек. 19, 2007 19:18:44
Всем спасибо. =)
Перспектива процесса пересборки всех библиотек, и бибилиотек от которых зависят эти бибиотеки в debug режиме меня несколько смутила.
Поступил проще - погуглил всех замешенных лиц с “segmantation fault” и нашел виновника в баг-траке (libcurl - оказался виноват).
shiza
Янв. 11, 2008 01:07:57
Та версия pycurl, которая доступна на сайте, требовала такую версию libcurl в которой видимо была бага при работе с FTP.
Мне показалось (судя по колву задокументированных багов) что у курла вообще с фтп не очень.
Обошел тем, что перестал парсить FTP. =)
shiza
Янв. 11, 2008 03:28:04
хм. у меня курл не в нитях работает. а с его мултиселектом.
Хотя нити есть в самой проге.
У меня такое подозрение - что этот fork жрет дофига памяти.
Там же небось на каждый форк уходит своя копия питона?
bialix
Янв. 11, 2008 08:44:41
shiza
хм. у меня курл не в нитях работает. а с его мултиселектом.
Хотя нити есть в самой проге.
У меня такое подозрение - что этот fork жрет дофига памяти.
Там же небось на каждый форк уходит своя копия питона?
сам интерпретатор – это шареная либа. внутренние структуры наверняка будут создаваться заново для форка, но сам код – общий?