Форум сайта python.su
Есть боооольшой скрипт. Использует несколько внешних сишных модулей (не моих).
Если он достаточно долго работает под нагрузкой - молча валится с segmentation fault.
Насколько я понимаю, с наибольшей долей вероятности - это сишная проблема. То ли модуля какого-то, толи интрепретатора.
Отсмотреть по коду - после какого вызова это проиходит - оочень сложно (оочень много кода =)
Как-бы понять - кто виноват?
P.S. на ум приходят разные мельком слышанные слова - типа stack trace - но в С я слабо шарю. Если дейсвительно нужен этот stack trace - то как его добыть?
Отредактировано (Дек. 14, 2007 09:48:45)
Офлайн
shizaЧитать документацию gdb на предмет post-mortem dubugging. Если коротко, то:
P.S. на ум приходят разные мельком слышанные слова - типа stack trace - но в С я слабо шарю. Если дейсвительно нужен этот stack trace - то как его добыть?
Офлайн
Как все непросто… Попробовал под windows запусить - так-же выпадает. Может под виндовс проще отдебажить это?
Офлайн
На самом деле не всё так сложно, как кажется, даже знание C обычно не требуется. В UNIX для такой отладки есть все средства. А вот под Windows я даже не знаю, с какой стороны подойти.
Офлайн
Ето 99% проблем сишние модулы. segmetation fault - ето переполнение какой-то string/ array, индексирование out of range, что-то такое, думаю. Есть вероятность где-то вызываешь С-функция с некорректными параметры вроде длина, граница, что-то такое. Но если так, то ето значит, что внешний модуль не отработать ошибке. Трудное сказать что-то конкретнее, труднее писать по русскому тоже, но если нет С-исходники , то нечего не поделаешь
Офлайн
ods все правильно пишет…
если С модуль сделан ввиде питон-расширения то я фик знат…
НО если это просто библиотека то _точно_ можно отдебежить только ее.
Процесс получае sigsegv в момент обращения к невалидному участку памяти.
А вот почему он таким стал…
Офлайн
Всем спасибо. =)
Перспектива процесса пересборки всех библиотек, и бибилиотек от которых зависят эти бибиотеки в debug режиме меня несколько смутила.
Поступил проще - погуглил всех замешенных лиц с “segmantation fault” и нашел виновника в баг-траке (libcurl - оказался виноват).
Отредактировано (Дек. 19, 2007 19:19:19)
Офлайн
Та версия pycurl, которая доступна на сайте, требовала такую версию libcurl в которой видимо была бага при работе с FTP.
Мне показалось (судя по колву задокументированных багов) что у курла вообще с фтп не очень.
Обошел тем, что перестал парсить FTP. =)
Отредактировано (Янв. 11, 2008 01:15:52)
Офлайн
хм. у меня курл не в нитях работает. а с его мултиселектом.
Хотя нити есть в самой проге.
У меня такое подозрение - что этот fork жрет дофига памяти.
Там же небось на каждый форк уходит своя копия питона?
Офлайн
shizaсам интерпретатор – это шареная либа. внутренние структуры наверняка будут создаваться заново для форка, но сам код – общий?
хм. у меня курл не в нитях работает. а с его мултиселектом.
Хотя нити есть в самой проге.
У меня такое подозрение - что этот fork жрет дофига памяти.
Там же небось на каждый форк уходит своя копия питона?
Офлайн