Russian Qt Forum
Ноябрь 11, 2024, 19:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Ваша программа падает у пользователей - ваши действия.  (Прочитано 14252 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Июль 20, 2009, 15:04 »

   Хотелось бы обсудить, что можно сделать в такой ситуации. Падает программа у некоторых пользователей, доступа к компам пользователей нет, я с ними даже не знаком. У меня не падает нигде, хотя стоит около 5 виндоусов для этой цели.

Вопрос - что можно включить в программу, что бы иметь некоторую диагностику. К примеру, я видел некоторые игры на DirectX когда падают, показывают окошко с номером строки где произошло падение. Как такое сделать в QT?
Записан
f-r-o-s-t
Гость
« Ответ #1 : Июль 20, 2009, 15:38 »

Реальный способ узнать строчку вставлять assertы. А с клиентами совсем нет связи? может можно как-то связаться? вопспроизводимо ли место падения, если нет то как часто это происходит?  а кроме вас её кто нибудь тестирует? ведь сам обычно не ждешь очевидной ошибки? Вполне вероятно что ошибка не в особенностях разных windows а в чем то другом.
 
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июль 20, 2009, 16:00 »

мне тож интересно как это сделать? например как в КДЕ делают при падении чего-либо - типа "отправить отчет разработчикам" и т.п. и показывается дамп и т.п.

Цитировать
Реальный способ узнать строчку вставлять assertы.
ассетры что позволят? т.е что будет происходить при крахе?
Записан

ArchLinux x86_64 / Win10 64 bit
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Июль 20, 2009, 16:00 »

Пользователи скачивают программу  с сайта  и говорят у меня падает через 5 минут или при нажатии на кнопку. А какой смысл от ASSERT? В основном сообщают о наличии ошибки и версии windows.
Записан
f-r-o-s-t
Гость
« Ответ #4 : Июль 20, 2009, 16:16 »

void Q_ASSERT ( bool test )
Prints a warning message containing the source code file name and line number if test is false.

При неверном условии обычно завершает программу и выводи номер строки,
можно написать самому и через __LINE__ узнавать номер.(при наличии #ifndef в больших количествах поможет врятле).

а вообще есть ли какие то мысли из за чего может быть такое поведение?
« Последнее редактирование: Июль 20, 2009, 16:18 от f-r-o-s-t » Записан
alex12
Гость
« Ответ #5 : Июль 20, 2009, 16:26 »

Как я понимаю, единственный вариант - распространять debug сборку и как-то делать запуск через программу, показывающую отладочную информацию при крахе программы. Могу ошибаться, но с QtCreater-ом идет похожая на это утилитка.
Записан
f-r-o-s-t
Гость
« Ответ #6 : Июль 20, 2009, 16:28 »

Как я понимаю, единственный вариант - распространять debug сборку и как-то делать запуск через программу, показывающую отладочную информацию при крахе программы. Могу ошибаться, но с QtCreater-ом идет похожая на это утилитка.

Надеюсь ты не про отладчик ...
Записан
crackedmind
Гость
« Ответ #7 : Июль 20, 2009, 17:58 »

Во время падения генерируем dump файл и дальше дело техники Улыбающийся Я для этих целей решил прикрутить google breakpad, кроссплатформенное решение генерации дампов. Правда документировано скудно, точнее никак Улыбающийся Только комментарии и спасают, и сорцы мозиловского crashreporter'a, в котором google breakpad также используется.

Если конкретно под винду и не охота возится с 3rdparty либами, то вот довольно интересная статейка.
http://dev.dtf.ru/articles/print.php?id=37058

Ну и также сайт: DebugInfo.com
« Последнее редактирование: Июль 20, 2009, 18:04 от crackedmind » Записан
agentprog
Гость
« Ответ #8 : Июль 20, 2009, 20:44 »

А не проще все что находится в main() запихнуть в try ... catch и при перехвате писать в лог файл все что возможно?
Записан
f-r-o-s-t
Гость
« Ответ #9 : Июль 20, 2009, 20:49 »

А не проще все что находится в main() запихнуть в try ... catch и при перехвате писать в лог файл все что возможно?

Интересно что писать будем ? =)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Июль 20, 2009, 21:17 »

void Q_ASSERT ( bool test )
Prints a warning message containing the source code file name and line number if test is false.

При неверном условии обычно завершает программу и выводи номер строки,
можно написать самому и через __LINE__ узнавать номер.(при наличии #ifndef в больших количествах поможет врятле).

а вообще есть ли какие то мысли из за чего может быть такое поведение?

Все верно, но это справедливо ТОЛЬКО для дебаг сборки.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Июль 20, 2009, 21:19 »

Админ, глянь вот эти темки:

http://www.prog.org.ru/topic_6574_0.html
http://www.prog.org.ru/topic_4638_0.html
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
agentprog
Гость
« Ответ #12 : Июль 20, 2009, 21:31 »

А не проще все что находится в main() запихнуть в try ... catch и при перехвате писать в лог файл все что возможно?

Интересно что писать будем ? =)

ну как минимум

мне тож интересно как это сделать? например как в КДЕ делают при падении чего-либо - типа "отправить отчет разработчикам" и т.п. и показывается дамп и т.п.
Записан
f-r-o-s-t
Гость
« Ответ #13 : Июль 20, 2009, 23:11 »

void Q_ASSERT ( bool test )
Prints a warning message containing the source code file name and line number if test is false.

При неверном условии обычно завершает программу и выводи номер строки,
можно написать самому и через __LINE__ узнавать номер.(при наличии #ifndef в больших количествах поможет врятле).

а вообще есть ли какие то мысли из за чего может быть такое поведение?

Все верно, но это справедливо ТОЛЬКО для дебаг сборки.

Согласен, не учел =)

А не проще все что находится в main() запихнуть в try ... catch и при перехвате писать в лог файл все что возможно?

Интересно что писать будем ? =)

ну как минимум

мне тож интересно как это сделать? например как в КДЕ делают при падении чего-либо - типа "отправить отчет разработчикам" и т.п. и показывается дамп и т.п.

Ну произошло у нас исключение в main, что мы на основании этого сможем записать в этот отчет ?
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #14 : Июль 21, 2009, 00:39 »

Если с пользователем связи нет - то вы по идее даже не узнаете о крахе программы..
Все же надо или выбивать из пользователя все сведения о том как и что он делает. В том числе что у него за компьютер, какие еще программы запущены и т.д. Либо ехать к нему самому. Несколько раз мне приходилось часами на телефоне так общаться и причину ошибки все же удавалось установить. Кроме того иногда приходилось отсыласть особо проблемным пользователям версию программы с выводом комментарием в особо подозрительных местах. Однажды выяснилось что программа не устанавливала сетевое подключение т.к. была заблокирована в "Брандмауре Виндовз". Так что с вашей программой может вообще все ОК а неродивый антивирус пытаясь ее проверять на лету падает ее(такое тоже не раз встречал)...
В общем ищите с ними связь...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.155 секунд. Запросов: 23.