题
我有一个 DLL 和一些 COM对象. 。有时,这会反对 崩溃 并在 Windows 事件日志中注册包含大量十六进制信息的错误事件。我不知道为什么会发生这种崩溃。
那么,如何跟踪这些 COM 对象异常呢?
解决方案
第一步是查找失败代码的十六进制值(例如E_FAIL 0x80004005)。我非常幸运地在 Google 中发布了该值,以了解错误代码的含义。
然后,我只是使用反复试验来尝试隔离代码中失败的位置以及失败的根本原因。
其他提示
如果您只是想要一种非常快速的方法来找出错误代码的含义,您可以使用 Visual Studio 附带的“错误查找”工具(详细信息 这里)。输入十六进制值,它将为您提供描述该错误代码的字符串。
当然,一旦你知道了这一点,你仍然必须弄清楚为什么会发生这种情况。
查找错误(hresult)代码的一个好方法是 HResult Plus 或 welt.exe(Windows 错误查找工具)。
我在 COM 类内部使用日志记录来查看发生了什么。此外,一旦 COM 类被可执行文件加载,您就可以将 VS 调试器附加到它并使用断点、监视和所有有趣的东西来调试 COM 代码。
COM 对象不会抛出异常。它们返回 HRESULT,其中大部分指示失败。因此,如果您正在寻找相当于异常堆栈跟踪的内容,那么您就不走运了。您必须手动浏览代码并弄清楚发生了什么。
不隶属于 StackOverflow