У меня есть DLL с некоторыми объектами COM . Иногда этот объект падает и регистрирует событие ошибки в журнале событий Windows с большим количеством шестнадцатеричной информации. Я понятия не имею, почему происходит этот сбой.
Итак, как я могу отследить эти исключения COM-объектов?
Первым шагом является поиск шестнадцатеричного значения кода ошибки (EG E_FAIL 0x80004005). Мне очень повезло с публикацией этого значения в Google, чтобы понять, что означает код ошибки.
Затем я просто использую метод проб и ошибок, чтобы попытаться выделить местоположение в коде, в котором происходит сбой, и основную причину сбоя.
Если вам нужен действительно быстрый способ узнать, что означает код ошибки, вы можете использовать инструмент «Поиск ошибок», поставляемый в комплекте с Visual Studio (подробности здесь ). Введите шестнадцатеричное значение, и оно даст вам строку, описывающую этот код ошибки.
Конечно, как только вы узнаете это, вам все равно придется выяснить, почему это происходит.
Хороший способ поиска кодов ошибок (hresult) - HResult Plus или welt.exe (средство поиска ошибок Windows).
Я использую ведение журнала внутри COM-классов, чтобы увидеть, что происходит. Кроме того, как только COM-класс загружается исполняемым файлом, вы можете подключить к нему отладчик VS и отладить COM-код с помощью точек останова, наблюдений и всего такого интересного.
COM-объекты не генерируют исключения. Они возвращают HRESULT, большинство из которых указывают на сбой. Поэтому, если вы ищете эквивалент трассировки стека исключений, вам не повезло. Вам придется пройтись по коду вручную и выяснить, что происходит.