Форум: "Основная";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизЧто делал пользователь до глюка? Найти похожие ветки
← →
IGray (2007-04-19 12:04) [0]Чтобы воспроизвести сбой мне нужно знать сабж..
Кто занимался подобным вопросом?
Пока вижу только два варианта:
1) Доработать компонент TActionList - чтоб он все выполняемые
экшены куда-нибудь писал - и везде его юзать.
2) Ловить все сообщения - через TApplicationEvents.ApplicationEventsMessage, к примеру..
Но непонятно как правильно фильтровать и декодировать поступающие сообщения...
Кто-нибудь занимался подобными проблемами?
Поделитесь пожалуйста!
← →
Правильный Вася (2007-04-19 12:52) [1]а стек выполнения не поможет?
← →
_Аноним (2007-04-19 12:56) [2]стек выполнения поможет?
← →
clickmaker © (2007-04-19 13:02) [3]ну навставляй во все процедуры запись в текстовик. Время, имя метода, параметры.
Прикрути еще обработчик Application.OnException на случай, если они где-то не ловятся или давятся в коде. Там тоже запись в лог
← →
IGray (2007-04-19 13:11) [4]Нет.. К сожалению...
Его я получаю, но он не говорит о том, какие действия выполнял пользователь ДО того действия, которое привело к сбою, а без этой информации ошибку далеко не всегда можно воспроизвести...
← →
IGray (2007-04-19 13:13) [5]
> ну навставляй во все процедуры запись в текстовик
Этот метод понятен, но хотелось бы чего-то более централизованного и замороченного...
← →
IGray (2007-04-19 13:14) [6]
> более централизованного и замороченного...
в смысле - более централизованного и менее замороченного ;-)
← →
ANB © (2007-04-19 13:21) [7]
> в смысле - более централизованного и менее замороченного
> ;-)
По моему опыту, не взяв юзера за жабры - очень тяжело воспроизвести ошибку. Или надо вести настолько зверское логирование, что оно уложит рабочую систему. В нашей конторе (и многих других, в которых я работал) целый отдел занимается разбором и воспроизведением ошибок.
← →
Jeer © (2007-04-19 23:58) [8]
> IGray (19.04.07 12:04)
Проще проектировать систему так, чтобы у пользователя не было права на ошибку:)
← →
Германн © (2007-04-20 02:36) [9]
> clickmaker © (19.04.07 13:02) [3]
>
> ну навставляй во все процедуры запись в текстовик. Время,
> имя метода, параметры.
> Прикрути еще обработчик Application.OnException на случай,
> если они где-то не ловятся или давятся в коде.
Если они "давятся в коде", то уже никто не спасёт ОРД! :)
← →
Германн © (2007-04-20 02:52) [10]И "если они давятся в коде", то лучше взять у Кэтмара метлу! Всяко чище будет на улицах и во дворах! :)
← →
Игорь Шевченко © (2007-04-20 11:19) [11]
> Чтобы воспроизвести сбой мне нужно знать сабж..
> Кто занимался подобным вопросом?
Я занимался. Делается небольшой список, куда заносится N последних действий пользователя (N выбирается), в Application.OnException вместе со стеком вызовов, приведшим к исключению в протокол заносится информация из списка последних действий, протокол отсылается по почте разработчику. Разумеется, что запись этих последних действий целиком и полностью ложится на плечи разработчика, кроме него никто не знает, как отличить одно действие пользователя от другого. Разумеется, нажатия на кнопки и движения мыши в действия не входит, а вот вызов какого-то блока программы определенно входит.
Потом отказался - писанины много.
← →
clickmaker © (2007-04-20 11:21) [12]
> [9] Германн © (20.04.07 02:36)
да это я х... спорол-с... если давятся, то конечно же до OnException не дойдет. Имел в виду неотловленные вообще исключения
← →
Desdechado © (2007-04-20 11:23) [13]Часто ошибки происходят не от последовательности действий, а от особенностей данных. При этом большинство данных ошибок не вызывает. Поэтому юзера берут за жабры, чтобы узнать те самые данные.
← →
clickmaker © (2007-04-20 11:25) [14]
> а от особенностей данных
я бы сказал: от сосбенностей некоторых юзеров вводить эти данные )
Но для этого и придумывают всякие MaskEditы и прочие феньки
← →
Плохиш © (2007-04-20 11:35) [15]
> я бы сказал: от сосбенностей некоторых юзеров вводить эти
> данные
Если программа грохается от особенностей юзеров вводить данные, то место такой программы в корзине, без вариантов.
PS. Когда мне приносят что-то потестировать, то первое, что я делаю после запуска, это использую слепой десятипальцевый ввод данных и только попробуйте спросить какие я кнопки нажимал :-)
← →
clickmaker © (2007-04-20 11:43) [16]
> слепой десятипальцевый ввод данных
а если это файл-менеджер и ты нажал (случайно) shift+space+down+del+Y ?
← →
Плохиш © (2007-04-20 11:55) [17]
> clickmaker © (20.04.07 11:43) [16]
> а если это файл-менеджер и ты нажал (случайно) shift+space+down+del+Y ?
Что ж я больной на рабочей машине тестировать? :-)
← →
clickmaker © (2007-04-20 12:06) [18]
> [17] Плохиш © (20.04.07 11:55)
дык на "нерабочей", как правило, всё и работает. Вся ботва начинается именно на рабочих :)
← →
Сергей М. © (2007-04-20 12:12) [19]
> IGray (19.04.07 12:04)
см. SetWindowsHookEx (WH_JOURNALRECORD, WH_JOURNALPLAYBACK)
← →
Плохиш © (2007-04-20 12:23) [20]
> clickmaker © (20.04.07 12:06) [18]
>
> > [17] Плохиш © (20.04.07 11:55)
>
> дык на "нерабочей", как правило, всё и работает.
Неправильные у вас какие-то "нерабочии" :-)
Давно как-то читал, что "программа должна работать только в конфигурации разработчика, если у пользователя конфигурация компьютера отличается, то это проблемы пользователя, а не разработчика" ;-)
← →
clickmaker © (2007-04-20 12:28) [21]
> программа должна работать только в конфигурации разработчика
золотые слова!
а если у пользователя нет какого-то msvcr80.dll или vcl70.bpl - проблемы индейцев шерифа не волнуют ;)
← →
Игорь Шевченко © (2007-04-20 13:42) [22]
> а если у пользователя нет какого-то msvcr80.dll или vcl70.
> bpl
то у него нет шансов запустить нужную программу, а раз программу нет шансов запустить, то она верной дорогой отправляется в корзину, попутно вызывая четкие определения умственных способностей разработчика и его родственников по материнской линии.
← →
clickmaker © (2007-04-20 16:49) [23]
> [22] Игорь Шевченко © (20.04.07 13:42)
да это шутка была
← →
SpellCaster (2007-04-24 11:32) [24]А как извлечь полезную инфу из отловленного эксепшна? Тот же стек, например. И еще, как его юзать? )) Вот в Яве-то всё просто, там он на нормальном человеческом языке пишется, а тут как разобраться?
← →
clickmaker © (2007-04-24 11:45) [25]
> как разобраться?
ну как, как... по-русски, конечно, с поллитрой )
На самом деле, 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-25 11:04) [26]> [25] clickmaker © (24.04.07 11:45)
Да вот понимаешь, сообщения "AV at address 00000000" как-то не очень хватает для определения, в каком месте произошёл косяк. А протоколировать все методы - это убиццо можно...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.033 c