Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Smogg от Февраль 17, 2017, 15:45



Название: Обработка случая "приложение неожиданно завершило работу".
Отправлено: Smogg от Февраль 17, 2017, 15:45
Юзер прислал вот такой скрин. Как сделать так, чтоб можно было определить, на какой строчке кода произошел крах?


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: gil9red от Февраль 17, 2017, 15:51
Хотя бы добавить логирование работы проги в файл :)


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: Пантер от Февраль 17, 2017, 16:06
Подробное логгирование. Если не поможет, собираешь дебаг версию и просишься подебажиться у клиента.


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: Smogg от Февраль 17, 2017, 16:24
Подробное логгирование. Если не поможет, собираешь дебаг версию и просишься подебажиться у клиента.

Проблема с логированием в том, что я уже что считаю нужным логирую. А "неожиданный крах" - это ошибка логики, т.е. что-то такое, о чем я просто не догадываюсь. А как логировать то, о чем не имею понятия?

А что, так можно - удаленно дебажиться?

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


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: Пантер от Февраль 17, 2017, 16:30
> А "неожиданный крах" - это ошибка логики

С чего это вдруг? Может, два раза что-то удаляется. А может пытаешься разименовать нулевой указатель. А может память портишь где-то. Профилируй свою прогу, пиши тесты.


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: Smogg от Февраль 17, 2017, 16:48
У меня клиент для сервера.
У всех все нормально, а один маргинал - оригинальничает и говорит, что крашиться рандомно через 3-30 минут. И шлет скрины то с таймаутом, то сразу с крахом...

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


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: ssoft от Февраль 17, 2017, 17:12
Анализируйте crash dump'ы, которые пользователь должен прислать.

В линуксе запись дампа можно инициировать программно для приложения, или с командной строки для всех приложений.

Код:
ulimit -c unlimited

Код
C++ (Qt)
   struct rlimit rlmt;
   const rlim_t my_process_dump_limit = 512*1024*1024; // 512 MB
   rlmt.rlim_cur = (rlim_t) my_process_dump_limit;
   rlmt.rlim_max = (rlim_t) my_process_dump_limit;
   setrlimit( RLIMIT_CORE, &rlmt );
   prctl( PR_SET_DUMPABLE, 1 );
 

В Windows не знаю, но что-то подобное имеется.


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: qate от Февраль 17, 2017, 17:54
В линуксе запись дампа можно инициировать программно для приложения, или с командной строки для всех приложений.

если в системе лимитами не зарезано или systemd не дурит
а так да - собирать релиз с отдельными дебуг символами(их юзеру не поставлять)
как это делать в венде не знаю, но можно почитать тут http://accu.org/index.php/journals/1412


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: panAlexey от Февраль 20, 2017, 10:06
На хабре рекламируется PVS студия - статический анализатор кода.
Может им пройтись?


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: ssoft от Февраль 20, 2017, 12:08
На хабре рекламируется PVS студия - статический анализатор кода.
Может им пройтись?

Можете и пройтись).
Только нужно понимать, какой эффект от какого инструмента требуется получить.
Явные и возможные описки и небрежности он, конечно, найдет. А вот утечки памяти или алгоритмические ошибки, тут отладчик и динамический анализатор нужен, и crash dump).


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: panAlexey от Февраль 20, 2017, 15:52
На хабре рекламируется PVS студия - статический анализатор кода.
Может им пройтись?

Можете и пройтись).
Только нужно понимать, какой эффект от какого инструмента требуется получить.
Явные и возможные описки и небрежности он, конечно, найдет. А вот утечки памяти или алгоритмические ошибки, тут отладчик и динамический анализатор нужен, и crash dump).
Мелкая описка может к большим непритностям привести.
Лучше пройтись :)


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: twp от Февраль 21, 2017, 21:45
Поэтому и хочеться узнать, как бы в С++ засунуть то, что работает из коробки в C# - при необработанном исключении открывается окошка дефолтного обработчика, где указывается причина и/или конкретная строчка кода.

Google Breakpad (http://maxsavenkov.livejournal.com/189460.html)


Название: Re: Обработка случая "приложение неожиданно завершило работу".
Отправлено: Racheengel от Февраль 22, 2017, 00:44
Google Breakpad (http://maxsavenkov.livejournal.com/189460.html)

+1