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

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

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

Решение

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

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

Комментарии (0)

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

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

Комментарии (0)

Хорошим способом поиска кодов ошибок (hresult) является HResult Plus или welt.exe (Windows Error Lookup Tool).

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

Комментарии (0)

COM возражает don' t бросают исключения. Они возвращают HRESULTs, большинство которых указывает на неудачу. Таким образом, если you' ре ища эквивалент трассировки стека исключения, you' неудачливое ре. You' ре, оказывающееся перед необходимостью прогулка через кодекс вручную и фигуру what' s продолжение.

Комментарии (0)