LINUX.ORG.RU

Как отловить случайный баг в большом проекте qt ?

 , , ,


0

2

Как выловить случайный баг, который происходит случайным образом. Прогу запускают для опроса оборудования на 5-8 часов и в процессе опроса вылетает иногда. Не получается отловить где падает. Как поймать, можно ли поймать момент падения и получить stack trace ? Интересует как на винде это сделать.

Ответ на: комментарий от aol

Я вот недавно с кросскомпиляцией под винду разбирался, заметил что cygwin (который оказался для этого не нужен) имеет кучу пакетов и если мне память не изменяет там был gdb, только вот я не понял это особенный какой или что. Виды у меня нет поэтому не проверить. Ну разве что в вайне, но чую я это будет не то

LINUX-ORG-RU ()

Собери прогу с google breakpad, обработай падение, сохрани дамп, потом проанализируй.

Давно делал, деталей не помню, но помню, что там все в порядке с документацией

ncuxer ()

1. Address sanitizer.

2. Bisect пока не найдешь какой комит ломает. Но это скорее от безысходности.

Ой в шиндошс нету санитайзера. Пичалька. Тогда на винфак.

Там тебе расскажут как написать свой хэедлер, который позволит тебе получить дамп. И как конпилять с отладочной информацией.

invy ★★★★★ ()
Последнее исправление: invy (всего исправлений: 2)

Помнится, если падает и студия установлена, то появится диалог, который предложит начать отладку. Но это опционально как-то было. Ещё можно это почитать. Если сборка идёт с mingw, то там и gdb есть, под ним можно запускать попробовать.

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

Чет у меня попка слишком пригорела, даже не поянил свою точку зрения.

Как работать с QSerialPort в потоке ?
Проблема с aircrack-ng
Как считать из файла набор строк с числами для сортировки этих строк по столбцу?
Как считать состояние переключателя в gl-ar300m-lite роутере ?
beaglebone как управлять с андроида
Как прошить eeprom на beaglebone ?
beaglebone kernel panic ошибка
Как настроить сеть на beaglebone
qt5 кросс-компиляция с поддержкой linuxfb

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

Давай так: с тебя $500, и мы поможем тебе найти проблему в твоей софтине.

byko3y ()

https://blogs.msdn.microsoft.com/chaun/2013/11/12/steps-to-catch-a-simple-cra...

А вообще, если под Linux, просто запускаешь gdb, file затем run Оно работает работает, валится. Пишешь bt и видишь где. Отладочные символы должны быть подключены

Еще под Valgrind можно погонять, под AddressSanitizer

Иногда просто гонять бесполезно, нужно создавать запредельную тестовую нагрузку софту, или сделать «порт» для возможности закачать в софт тестовые воздействия, или лучше растащить некий критичный функционал на библиотеки или модули, и тестить его отдельно по полной

«Иногда вылетает» при запросах оборудования - значит код анализа ответов вы не отладили. Я бы ответы в лог писал + делал flush, и только потом анализ этих данных, и когда свалится - последняя запись покажет какие данные оно не переваривает, ошибка будет на поверхности

I-Love-Microsoft ★★★★★ ()

При падении вылезает диалог, сообщающий что программа упала и предлагающий ее закрыть, либо подключить отладчик. Можно подключить отладчик сразу, если на компе установлен хотя бы windbg, либо зайти в менеджер процессов и сохранить оттуда дамп.

annulen ★★★★★ ()

Собрать отладочный билд и настроить postmortem debug на нужный отладчик.

Ещё под виндой можно корки делать, так же как на ляликсе, начни с google:win32 minidump.

pon4ik ★★★★★ ()

В любом случае писать тесты. Если программа нормально разделена на модули, это не должно составить труда. Если нет — ССЗБ.

А под линуксом она вообще работает? Если да — собрать под линукс и прогнать под валгриндом. Как правило, косяки, чреватые падениями, кроссплатформенны, хотя бывают и исключения.

hobbit ★★★★★ ()