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

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

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


person Daniel Silveira    schedule 14.08.2008    source источник


Ответы (4)


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

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

person Jay Mooney    schedule 14.08.2008

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

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

person Matt Dillard    schedule 14.08.2008

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

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

person Nick    schedule 16.08.2008

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

person Brad Wilson    schedule 16.08.2008