2008-08-14 65 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,其中大部分表明失敗。所以,如果你正在尋找相當於一個異常堆棧跟蹤,你是不走運的。你將不得不手工查看代碼並找出發生了什麼。