LINUX.ORG.RU

как узнать отчего вылетает питон-скрипт, если нет никаких ошибок?


0

1

к слову, чаще он вылетает на винде
в линуксе работает лучше, но тоже вылетает

написан на питон 3.2, окно pyqt4, многопоточность используется futures

запускаю потоки и через какое-то время приложение исчезает с экрана
в консоли никаких ошибок, stderr перенаправлял в файл - тоже ничего
в винде в событиях системы нет никаких новых записей после вылета

подумываю переписать многопоточность на потоки pyqt, либо попробовать вместе qnetworkaccesmanager юзать urllib

но как все же локализовать ошибку?

дебаггером тоже не представляю как это поймать - надо ведь скачать множество страниц в разных потоках

есть здесь те, кто может помочь разобраться? готов заплатить

★★★

Последнее исправление: sergey-novikov (всего исправлений: 1)

но как все же локализовать ошибку?

писать логи

//кэп

du_hast
()

>подумываю переписать многопоточность на потоки pyqt

Сомневаюсь что кутэ threadsafe, может поправят. Ты ведь с кутэ работаешь эксклюзивно из одного потока?

tensai_cirno ★★★★★
()
Ответ на: комментарий от sergey-novikov

проблему удалось локализовать - в потоке одна функция вызывается рекурсивно - это и приводит к краху

но все же интересно, чем же таким можно было прошерстить скрипт, чтобы увидеть эту ошибку, а не искать методом исключения

sergey-novikov ★★★
() автор топика
Ответ на: комментарий от sergey-novikov

> но все же интересно, чем же таким можно было прошерстить скрипт, чтобы увидеть эту ошибку, а не искать методом исключения

Лучше старого дооброго bisect ничего еще не придумали. А для питоновского скрипта можно посмотреть на python -m trace -l . Правда не знаю, поможет ли это в случае с многопоточной программой.

anonymous
()
Ответ на: комментарий от sergey-novikov

>проблему удалось локализовать - в потоке одна функция вызывается рекурсивно - это и приводит к краху

Рекурсивные функции - удел функциональщины.

tensai_cirno ★★★★★
()
Ответ на: комментарий от tensai_cirno

я ошибся, крах не из-за рекурсии
так что проблема ещё не выявлена

а что же есть в ООП, не менее элегантное чем рекурсия и способное её заменить?

sergey-novikov ★★★
() автор топика

а статус выхода какой? 0? Может прога завершается? Сам прогу писал?

true_admin ★★★★★
()
Ответ на: комментарий от sergey-novikov

> а что же есть в ООП, не менее элегантное чем рекурсия и способное её заменить?

Есть хоть какие-нибудь яблоки, сравнимые по вкусу с апельсинами, а?

anonymous
()
Ответ на: комментарий от sergey-novikov

> а что же есть в ООП, не менее элегантное чем рекурсия и способное её заменить?

Циклы. Рекурсии чертовски сложно отлаживать, внезапные Stack Overflow error и прочие мелкие радости.

tensai_cirno ★★★★★
()

писать логи, уже ж сказали. Во всех крит местах пишите в логфайл делаю то... то то сделано успешно. Для многопоточности лучше по отдельному логфайлу на каждый поток, а то потом не разберетьсь.

Ну и да, втыкать вывод в логи методом половинного деления - воткнули в начале и конце больших кусков куда, выяснили кто упал, начинаете его ковырять - втыкакете вывод в его середине и т.д.

Скорее всего это какие то кютэшные замуты - обычно стек исключения выводиться всегда, если только это не сегфолт в каком то юзеровском модуле.

Прекрасно в питоне работает рекурсия и всякие функц. фичи - надо их просто делать прямыми руками;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

проблема практически решена
дело не в рекурсии - она работает нормально

дело в том, что все потоки писали в гуевый textEdit через систему сигналов-слотов qt

как оказалось - этот метод и вызывал крах на винде

на данный момент реализовано так:
все потоки отправляют сообщение в queue-очередь
а в главном потоке запущен таймер, который периодически чекает queue и, если находит в нем сообщение, через сигнал-слот помещает это сообщение в textEdit

sergey-novikov ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.