Как отследить исключения COM-объектов? - PullRequest
0 голосов
/ 14 августа 2008

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

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

Ответы [ 4 ]

2 голосов
/ 14 августа 2008

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

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

1 голос
/ 16 августа 2008

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

1 голос
/ 16 августа 2008

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

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

1 голос
/ 14 августа 2008

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

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

...