Анализ катастрофического отказа в Windows: что сообщение об ошибке говорит нам?

Можно выключить ограничения доступа Java на отражение так, чтобы частный ничего не означал.

Эти setAccessible(true) вызов делает это.

единственное ограничение - то, что ClassLoder может запретить Вам от выполнения этого.

См. Ниспровергающая Защита Доступа Java для Поблочного тестирования (Ross Burton) для способа сделать это в Java.

26
задан zar 24 June 2016 в 11:32
поделиться

3 ответа

64-битная отметка времени - это время, когда основной поток приложения был создан с интервалом в 100 наносекунд с 1 января 1601 года (UTC) (это известно как FILETIME ) . 32-битная метка времени действительно имеет формат time_t (он сообщает время создания модуля и хранится в заголовке модуля).

Я бы сказал, что 0x0002d160 - это смещение от адреса загрузки модуля. (кажется, слишком мало для абсолютного адреса). Запустите Visual Studio, запустите отладчик, посмотрите окно отладки «модулей». Ваш exe-файл должен быть указан там. Найдите адрес, по которому загружен модуль, добавьте к этому адресу 0x0002d160 и посмотрите на разборку по полученному адресу. Visual Studio показывает исходный код, смешанный со сборкой,

17
ответ дан 28 November 2019 в 07:49
поделиться

Вы мало что сможете сделать с этой информацией после смерти.

Полезный бит информации - это код исключения 0xc0000005, который в данном случае означает просто нарушение прав доступа. Итак, вы разыменовали нуль или какой-то другой бит памяти, которым вы не владели.

Смещение ошибки, я подозреваю, - это смещение от того места, где ваша DLL была загружена в память, так что теоретически вы можете добавить его к своему базовому адресу и найти код нарушения, но я не уверен.

Лучше всего отладить это в отладчике, когда это произойдет в следующий раз. Вы можете использовать Параметры выполнения файла изображения для автоматического запуска приложения в отладчике . Убедитесь, что у вас есть готовые символы (подумайте о создании DEBUG, если вы в настоящее время используете RELEASE).

7
ответ дан 28 November 2019 в 07:49
поделиться

Бог отладки Джон Роббинс создал небольшой инструмент под названием CrashFinder, чтобы помочь в таких ситуациях: https://www.wintellect.com/crashfinder-2-8-yes-native-code-still-lives/

Всегда полезно сохранять PDB для каждой сборки, которую вы публикуете (это звучит как инструмент, который вы используете только в частном порядке, но было бы неплохо сохранить символы PDB для последней сборки).

6
ответ дан 28 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: