Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск случайной/несистемной ошибки

22K
13 октября 2010 года
ChickenIdol
15 / / 27.03.2007
Приложение под Windows несистемно падает по ночам, создается отчет:
Application Failure app.exe 1.0.0.1 in app.exe 1.0.0.1 at offset 0000870a

Подскажите, каким образом найти функцию или строку кода которая вызывает ошибку?
Если поделитесь ссылками на статьи по поиску несистемных ошибок буду благодарен.
8.2K
13 октября 2010 года
bagie2
299 / / 26.10.2008
мне вот самому интересно как лучше всего поступать в таких случаях.

единственное что могу сказать, что 0000870a это наверняка смещение метода у какого-то объекта или поля у структуры, а указать на этот объект\структуру передается null (типа mov eax,[edx+0000870a], где edx=0) может и оказаться что 0000870a это EIP. вообще в отчете много чего еще должно быть (если он включен, сохраняется где то во временных файлах): стек (попытаться раскрутить его), регистры и т.д. в дизасме поискать значения для смещений 0000870a тоже можно, я не думаю что их очень много.

может быть еще использовать UnhandledExceptionFilter и сохранять самому в лог такие ситуации
1
13 октября 2010 года
kot_
7.3K / / 20.01.2000
Цитата: ChickenIdol
Приложение под Windows несистемно падает по ночам, создается отчет:
Application Failure app.exe 1.0.0.1 in app.exe 1.0.0.1 at offset 0000870a

Подскажите, каким образом найти функцию или строку кода которая вызывает ошибку?
Если поделитесь ссылками на статьи по поиску несистемных ошибок буду благодарен.


1) смотрите дамп памяти, который должен при этом создаваться
2) реализуйте возможность записи логов вашего приложения - т.е. (например) любая смена состояния программы (обращение к ресурсам, получение пакета, запись пакета, запуск потока и т.д.) должно логироваться - тогда последняя запись позволит определить место, с которого надо искать ошибку. В лог пишется как правило время события и какое событие произошло.
3) использование, как уже посоветовали UnhandledExceptionFilter
4) комбинирование всех вышеперечисленных.

22K
13 октября 2010 года
ChickenIdol
15 / / 27.03.2007
Винда сохраняет дам памяти? Где его можно посмотреть?

Сейчас приложение просто падает, не выводя никаких ошибок, события смотрю через: Администрирование/Просмотр Событий
22K
13 октября 2010 года
ChickenIdol
15 / / 27.03.2007
Нашел. Спасибо, буду ковыряться.
1
13 октября 2010 года
kot_
7.3K / / 20.01.2000
дамп находится в папке tmp у пользователя, от имени которого запускалась программа. Должно быть сформированно два файла - один с расширением .dmp и .txt.
Файлы как правило имеют одинаковое время создания.
1
13 октября 2010 года
kot_
7.3K / / 20.01.2000
кстати если политиками безопасности отключено отправка дампа в мелкософт - то вполне возможно дамп не создается. Тогда надо включить, и не закрывая окно с сообщением о ошибке - разблокировать файл дампа и скопировать его в нужное место. Хотя может есть и более простые способы - например настроить поведение системы. Хз. :)
22K
18 октября 2010 года
ChickenIdol
15 / / 27.03.2007
Всем спасибо. Не писал по результатам, т.к ждал когда прога снова упадет.

Как решил проблему:
По сути я просто вытащил дамп памяти вместе с логами от DrWatson, положил бинарник в то же место, что и на удаленный системе, положил исходники на место и отдебажил файл dmp в студии. Все очень просто.

Вот еще статейка по теме: http://www.devdoc.ru/index.php/content/view/debugging_p5.htm
1
18 октября 2010 года
kot_
7.3K / / 20.01.2000
И в чем таки оказалась причина?
22K
18 октября 2010 года
ChickenIdol
15 / / 27.03.2007
Все как обычно, размер буфера выбран исходя из предположений о размере данных. Конкретно: размер заголовка окна превышал 1024 символа.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог