Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top