2008-08-14 66 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,其中大部分表明失败。所以,如果你正在寻找相当于一个异常堆栈跟踪,你是不走运的。你将不得不手工查看代码并找出发生了什么。