Название: Отловить вылет программы Отправлено: ecspertiza от Февраль 23, 2013, 18:35 Для начала всех с праздником :) Подтолкните пожалуйста меня на мысль. Есть софт кроссплатформеный, хочется добавить в него такую фичу, если вдруг по каким то причинам софт упал, сформировать некий дамп типа
1. Класс\метод где упал софт. 2. Какова причина ну например деление на 0 или ошибка сегментации. может что то еще. Естественно хочется ловить это все глобально, есть ли варианты для решения такой задачи, с ходу что то в голову ничего не приходит ? Название: Re: Отловить вылет программы Отправлено: Bepec от Февраль 23, 2013, 19:04 Говорю о Windows!
Собственно для такой ситуации имеется вроде решение аля запись дампа памяти и отправки разработчику. Этим же кроссплатформенно вроде занимается библиотека CrashReport, но у меня не получилось её приструнить - нехватило времени. Название: Re: Отловить вылет программы Отправлено: Igors от Февраль 24, 2013, 08:51 В Mac OSX это делается автоматически - и очень хорошо. Симитируйте краш и посмотрите CrashReport - отпадет желание "лезть с грыжей на танк" :)
Опять у Вас какие-то "задачи обслуживания" :'( Название: Re: Отловить вылет программы Отправлено: ecspertiza от Февраль 24, 2013, 13:49 Дамп памяти это конечно хорошо, но лично мне он мало о чем говорит, может я не настолько хорошо его понимаю, но когда идет список hex кода и мол приложение упало в QtNetwork.dll в 0x73dc3 вообще ничего не говорит :) Сидел я значит вчера и игрался в Starcraft 2 ,что то наделал там и он у меня упал, после падения появилось окошко, с надписью приложение упало при работе с OpenGL бла бла в такой то процедуре и галочка отправить это разработчику или нет. И я задумался софт вроде как делаем публичный используется на множестве компьютеров, конфигураций естественно тысячи, где то может ,что то не так сработать и софт упадет. Так вот я и задумался что было бы здорово иметь возможность отловить именно место падения софта, то есть имя процедуры может даже класс, естественно сопутствующую инфу и дать возможность юзверю отправить это дело разработчику. Ну по сути то ,что я увидел у Blizzard. И собственно говоря меня мучает вопрос как они это сделали, навряд ли каждую процедуру в try catch заключали.
Название: Re: Отловить вылет программы Отправлено: Bepec от Февраль 24, 2013, 16:56 Дамп памяти по сути и есть программа, замершая в точке падения. Если корректное падение (т.е. стек не затёрт), то будет вам стек, порядок вызовов, вплоть до начала программы. А при наличии самого дампа можно пойти назад по шагам вроде, причём все переменные и прочая будут аналогичны как при падении.
PS сам снимал дампы, сам пытался открыть - почему то нет стандартных решений для просмотра дампов. Никак символьные файлы не цеплялись, а в ассемблере нифига непонятно :D Название: Re: Отловить вылет программы Отправлено: Igors от Февраль 24, 2013, 17:11 Дамп памяти это конечно хорошо, но лично мне он мало о чем говорит, Как и мне и любому другому, а это просто значит что ничего хорошего в нем нет. У Вас чисто велосипедная идея, это давно есть, и прекрасно работает, и юзверь отправить может. Тем более странно что на Mac Вы работаете, неужели никогда не сталкивались ???Название: Re: Отловить вылет программы Отправлено: maxxant от Февраль 24, 2013, 19:12 именно кросплатформенно есть же
http://code.google.com/p/google-breakpad/ если что, есть краткое описание на русском: http://lo-tips.blogspot.ru/2011/03/google-breakpad.html Название: Re: Отловить вылет программы Отправлено: ecspertiza от Февраль 24, 2013, 22:08 Igors, на Mac , да, это сделано хорошо, но кабы хочется все платформы сразу и какую нибудь свою оболочку. За Google Breakpad спасибо, покурю, вроде ,что то похожее.
|