Поиск случайной/несистемной ошибки
Application Failure app.exe 1.0.0.1 in app.exe 1.0.0.1 at offset 0000870a
Подскажите, каким образом найти функцию или строку кода которая вызывает ошибку?
Если поделитесь ссылками на статьи по поиску несистемных ошибок буду благодарен.
единственное что могу сказать, что 0000870a это наверняка смещение метода у какого-то объекта или поля у структуры, а указать на этот объект\структуру передается null (типа mov eax,[edx+0000870a], где edx=0) может и оказаться что 0000870a это EIP. вообще в отчете много чего еще должно быть (если он включен, сохраняется где то во временных файлах): стек (попытаться раскрутить его), регистры и т.д. в дизасме поискать значения для смещений 0000870a тоже можно, я не думаю что их очень много.
может быть еще использовать UnhandledExceptionFilter и сохранять самому в лог такие ситуации
Цитата: ChickenIdol
Приложение под Windows несистемно падает по ночам, создается отчет:
Application Failure app.exe 1.0.0.1 in app.exe 1.0.0.1 at offset 0000870a
Подскажите, каким образом найти функцию или строку кода которая вызывает ошибку?
Если поделитесь ссылками на статьи по поиску несистемных ошибок буду благодарен.
Application Failure app.exe 1.0.0.1 in app.exe 1.0.0.1 at offset 0000870a
Подскажите, каким образом найти функцию или строку кода которая вызывает ошибку?
Если поделитесь ссылками на статьи по поиску несистемных ошибок буду благодарен.
1) смотрите дамп памяти, который должен при этом создаваться
2) реализуйте возможность записи логов вашего приложения - т.е. (например) любая смена состояния программы (обращение к ресурсам, получение пакета, запись пакета, запуск потока и т.д.) должно логироваться - тогда последняя запись позволит определить место, с которого надо искать ошибку. В лог пишется как правило время события и какое событие произошло.
3) использование, как уже посоветовали UnhandledExceptionFilter
4) комбинирование всех вышеперечисленных.
Сейчас приложение просто падает, не выводя никаких ошибок, события смотрю через: Администрирование/Просмотр Событий
Нашел. Спасибо, буду ковыряться.
Файлы как правило имеют одинаковое время создания.
кстати если политиками безопасности отключено отправка дампа в мелкософт - то вполне возможно дамп не создается. Тогда надо включить, и не закрывая окно с сообщением о ошибке - разблокировать файл дампа и скопировать его в нужное место. Хотя может есть и более простые способы - например настроить поведение системы. Хз. :)
Как решил проблему:
По сути я просто вытащил дамп памяти вместе с логами от DrWatson, положил бинарник в то же место, что и на удаленный системе, положил исходники на место и отдебажил файл dmp в студии. Все очень просто.
Вот еще статейка по теме: http://www.devdoc.ru/index.php/content/view/debugging_p5.htm
И в чем таки оказалась причина?
Все как обычно, размер буфера выбран исходя из предположений о размере данных. Конкретно: размер заголовка окна превышал 1024 символа.