Как отследить исключения COM-объектов?

У меня есть DLL с некоторыми объектами COM . Иногда этот объект падает и регистрирует событие ошибки в журнале событий Windows с большим количеством шестнадцатеричной информации. Я понятия не имею, почему происходит этот сбой.

Итак, как я могу отследить эти исключения COM-объектов?

14.08.2008 12:41:43
4 ОТВЕТА
РЕШЕНИЕ

Первым шагом является поиск шестнадцатеричного значения кода ошибки (EG E_FAIL 0x80004005). Мне очень повезло с публикацией этого значения в Google, чтобы понять, что означает код ошибки.

Затем я просто использую метод проб и ошибок, чтобы попытаться выделить местоположение в коде, в котором происходит сбой, и основную причину сбоя.

2
14.08.2008 13:03:10

Если вам нужен действительно быстрый способ узнать, что означает код ошибки, вы можете использовать инструмент «Поиск ошибок», поставляемый в комплекте с Visual Studio (подробности здесь ). Введите шестнадцатеричное значение, и оно даст вам строку, описывающую этот код ошибки.

Конечно, как только вы узнаете это, вам все равно придется выяснить, почему это происходит.

1
14.08.2008 13:40:05

Хороший способ поиска кодов ошибок (hresult) - HResult Plus или welt.exe (средство поиска ошибок Windows).

Я использую ведение журнала внутри COM-классов, чтобы увидеть, что происходит. Кроме того, как только COM-класс загружается исполняемым файлом, вы можете подключить к нему отладчик VS и отладить COM-код с помощью точек останова, наблюдений и всего такого интересного.

1
16.08.2008 19:00:30

COM-объекты не генерируют исключения. Они возвращают HRESULT, большинство из которых указывают на сбой. Поэтому, если вы ищете эквивалент трассировки стека исключений, вам не повезло. Вам придется пройтись по коду вручную и выяснить, что происходит.

1
16.08.2008 19:55:19