Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.182 c
2-1180545980
ari_9
2007-05-30 21:26
2007.06.24
динамический массив динамических массивов. почему не получается ?


15-1180189731
Kostafey
2007-05-26 18:28
2007.06.24
Посоветуйте где найти простой фришный конвертор html в chm


15-1180424184
Int23
2007-05-29 11:36
2007.06.24
Где взять прогнозы погоды за 2005 год?


15-1180464954
Иксик
2007-05-29 22:55
2007.06.24
.NET 2.0 web.config


2-1180960375
UMU
2007-06-04 16:32
2007.06.24
Запись в ini файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский