2008-08-14 33 views
0

J'ai un DLL avec certains objets COM. Parfois, cet objet se bloque et enregistre un événement d'erreur dans le journal des événements Windows avec beaucoup d'informations hexadécimales. Je n'ai aucune idée de pourquoi ces accidents se produisent. Alors, comment puis-je suivre ces exceptions d'objets COM?Comment tracer les exceptions d'objets COM?

Répondre

2

La première étape consiste à rechercher la valeur hexadécimale du code de panne (E.G. E_FAIL 0x80004005). J'ai vraiment eu de la chance en affichant cette valeur dans Google pour avoir une idée de ce que le code d'erreur signifie. Puis, j'utilise simplement des essais et erreurs pour essayer d'isoler l'emplacement dans le code qui échoue, et la cause première de l'échec.

1

Si vous voulez juste un moyen très rapide de découvrir ce que le code d'erreur signifie, vous pouvez utiliser l'outil "Error Lookup" fourni avec Visual Studio (détails here). Entrez la valeur hexadécimale, et il vous donnera la chaîne décrivant ce code d'erreur.

Bien sûr, une fois que vous le savez, vous devez toujours comprendre pourquoi cela se passe.

1

Un bon moyen de rechercher des codes d'erreur (hresult) est HResult Plus ou welt.exe (outil de recherche d'erreur Windows).

J'utilise la journalisation en interne dans les classes COM pour voir ce qui se passe. De plus, une fois que la classe COM est chargée par l'exécutable, vous pouvez y attacher le débogueur VS et déboguer le code COM avec des points d'arrêt, des montres et toutes ces choses amusantes.

1

Les objets COM ne lancent pas d'exceptions. Ils renvoient des HRESULT, dont la plupart indiquent un échec. Donc, si vous cherchez l'équivalent d'une trace de pile d'exception, vous n'avez pas de chance. Vous allez devoir parcourir le code à la main et comprendre ce qui se passe.