2008-08-14 15 views
0

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

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

ответ

2

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

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

1

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

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

1

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

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

1

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