Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Что делал пользователь до глюка?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
2-1180960375
UMU
2007-06-04 16:32
2007.06.24
Запись в ini файл


1-1176985146
SpellCaster
2007-04-19 16:19
2007.06.24
Динамическое выделение памяти в нитях


15-1179996866
gray_falcon
2007-05-24 12:54
2007.06.24
Дайте линк на самоучитель


1-1177337407
IMHO
2007-04-23 18:10
2007.06.24
Быстрое нахождение кол-ва подстрок в строке


15-1180521426
lopi
2007-05-30 14:37
2007.06.24
Как это делается?