![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что делал пользователь до глюка?
IGray © (2007-04-19 12:04:00)Чтобы воспроизвести сбой мне нужно знать сабж..
Кто занимался подобным вопросом?
Пока вижу только два варианта:
1) Доработать компонент TActionList - чтоб он все выполняемые
экшены куда-нибудь писал - и везде его юзать.
2) Ловить все сообщения - через TApplicationEvents.ApplicationEventsMessage, к примеру..
Но непонятно как правильно фильтровать и декодировать поступающие сообщения...
Кто-нибудь занимался подобными проблемами?
Поделитесь пожалуйста!
SpellCaster (2007-04-25 11:04:00) [1]> [25] clickmaker © (24.04.07 11:45)
Да вот понимаешь, сообщения "AV at address 00000000" как-то не очень хватает для определения, в каком месте произошёл косяк. А протоколировать все методы - это убиццо можно...
clickmaker (2007-04-24 11:45:00) [2]
> как разобраться?
ну как, как... по-русски, конечно, с поллитрой )
На самом деле, Exeption.Message в большинстве случаев достаточно. А если ты протоколируешь вызовы всех методо, то stack trace вовсе ни к чему.
У меня был проект, в котором во всех жизненно важных процедурах был пролог и эпилог для записи в лог, типа
procedure AAA();
begin
LogMethodCall('AAA дата-время, параметры, что-то там еще... - Enter')
try
...
LogMethodCall('AAA дата-время, параметры, что-то там еще... - Leave')
except
on E: Exception do LogError(e.Message)
end;
end;
как вариант.
Но лог может получиться не маленьким, мягко говоря...
SpellCaster (2007-04-24 11:32:00) [3]А как извлечь полезную инфу из отловленного эксепшна? Тот же стек, например. И еще, как его юзать? )) Вот в Яве-то всё просто, там он на нормальном человеческом языке пишется, а тут как разобраться?
clickmaker (2007-04-20 16:49:00) [4]
> [22] Игорь Шевченко © (20.04.07 13:42)
да это шутка была
Игорь Шевченко (2007-04-20 13:42:00) [5]
> а если у пользователя нет какого-то msvcr80.dll или vcl70.
> bpl
то у него нет шансов запустить нужную программу, а раз программу нет шансов запустить, то она верной дорогой отправляется в корзину, попутно вызывая четкие определения умственных способностей разработчика и его родственников по материнской линии.
clickmaker (2007-04-20 12:28:00) [6]
> программа должна работать только в конфигурации разработчика
золотые слова!
а если у пользователя нет какого-то msvcr80.dll или vcl70.bpl - проблемы индейцев шерифа не волнуют ;)
Плохиш (2007-04-20 12:23:00) [7]
> clickmaker © (20.04.07 12:06) [18]
>
> > [17] Плохиш © (20.04.07 11:55)
>
> дык на "нерабочей", как правило, всё и работает.
Неправильные у вас какие-то "нерабочии" :-)
Давно как-то читал, что "программа должна работать только в конфигурации разработчика, если у пользователя конфигурация компьютера отличается, то это проблемы пользователя, а не разработчика" ;-)
Сергей М. (2007-04-20 12:12:00) [8]
> IGray (19.04.07 12:04)
см. SetWindowsHookEx (WH_JOURNALRECORD, WH_JOURNALPLAYBACK)
clickmaker (2007-04-20 12:06:00) [9]
> [17] Плохиш © (20.04.07 11:55)
дык на "нерабочей", как правило, всё и работает. Вся ботва начинается именно на рабочих :)
Плохиш (2007-04-20 11:55:00) [10]
> clickmaker © (20.04.07 11:43) [16]
> а если это файл-менеджер и ты нажал (случайно) shift+space+down+del+Y ?
Что ж я больной на рабочей машине тестировать? :-)
clickmaker (2007-04-20 11:43:00) [11]
> слепой десятипальцевый ввод данных
а если это файл-менеджер и ты нажал (случайно) shift+space+down+del+Y ?
Плохиш (2007-04-20 11:35:00) [12]
> я бы сказал: от сосбенностей некоторых юзеров вводить эти
> данные
Если программа грохается от особенностей юзеров вводить данные, то место такой программы в корзине, без вариантов.
PS. Когда мне приносят что-то потестировать, то первое, что я делаю после запуска, это использую слепой десятипальцевый ввод данных и только попробуйте спросить какие я кнопки нажимал :-)
clickmaker (2007-04-20 11:25:00) [13]
> а от особенностей данных
я бы сказал: от сосбенностей некоторых юзеров вводить эти данные )
Но для этого и придумывают всякие MaskEditы и прочие феньки
Desdechado (2007-04-20 11:23:00) [14]Часто ошибки происходят не от последовательности действий, а от особенностей данных. При этом большинство данных ошибок не вызывает. Поэтому юзера берут за жабры, чтобы узнать те самые данные.
clickmaker (2007-04-20 11:21:00) [15]
> [9] Германн © (20.04.07 02:36)
да это я х... спорол-с... если давятся, то конечно же до OnException не дойдет. Имел в виду неотловленные вообще исключения
Игорь Шевченко (2007-04-20 11:19:00) [16]
> Чтобы воспроизвести сбой мне нужно знать сабж..
> Кто занимался подобным вопросом?
Я занимался. Делается небольшой список, куда заносится N последних действий пользователя (N выбирается), в Application.OnException вместе со стеком вызовов, приведшим к исключению в протокол заносится информация из списка последних действий, протокол отсылается по почте разработчику. Разумеется, что запись этих последних действий целиком и полностью ложится на плечи разработчика, кроме него никто не знает, как отличить одно действие пользователя от другого. Разумеется, нажатия на кнопки и движения мыши в действия не входит, а вот вызов какого-то блока программы определенно входит.
Потом отказался - писанины много.
Германн (2007-04-20 02:52:00) [17]И "если они давятся в коде", то лучше взять у Кэтмара метлу! Всяко чище будет на улицах и во дворах! :)
Германн (2007-04-20 02:36:00) [18]
> clickmaker © (19.04.07 13:02) [3]
>
> ну навставляй во все процедуры запись в текстовик. Время,
> имя метода, параметры.
> Прикрути еще обработчик Application.OnException на случай,
> если они где-то не ловятся или давятся в коде.
Если они "давятся в коде", то уже никто не спасёт ОРД! :)
Jeer (2007-04-19 23:58:00) [19]
> IGray (19.04.07 12:04)
Проще проектировать систему так, чтобы у пользователя не было права на ошибку:)
ANB (2007-04-19 13:21:00) [20]
> в смысле - более централизованного и менее замороченного
> ;-)
По моему опыту, не взяв юзера за жабры - очень тяжело воспроизвести ошибку. Или надо вести настолько зверское логирование, что оно уложит рабочую систему. В нашей конторе (и многих других, в которых я работал) целый отдел занимается разбором и воспроизведением ошибок.