对于模糊的主题,我深表歉意,但我在这方面缺乏经验,无法提出更具体的内容。
我正在调试加载 COM 插件的第三方应用程序(用 VC++ 2005 编写)。我的插件是用 C# 4.0 编写的。当我的插件中的特定方法被调用时,应用程序崩溃,但给了我一个相当无用的调用堆栈:
151f0d2d()
clr.dll!_COMToCLRDispatchHelper@28() + 0x28 bytes
clr.dll!BaseWrapper<Stub *,FunctionBase<Stub *,&DoNothing<Stub *>,&StubRelease<Stub>,2>,0,&CompareDefault<Stub *>,2>::~BaseWrapper<Stub *,FunctionBase<Stub *,&DoNothing<Stub *>,&StubRelease<Stub>,2>,0,&CompareDefault<Stub *>,2>() + 0x175b8b bytes
clr.dll!COMToCLRWorkerBody() + 0x80 bytes
clr.dll!COMToCLRWorkerDebuggerWrapper() + 0x34 bytes
clr.dll!_COMToCLRWorker@8() + 0x12b bytes
我认为这告诉我的是存在与 CCW 相关的问题。应用程序在崩溃时应该在我的插件中调用的方法实际上也没有被调用。我更改了我的插件以立即抛出 NotImplementedException,并且它没有被抛出。但是,如果我修改同一接口中的另一个方法以引发 NotImplementedException,应用程序会正确报告该错误。
谁能推荐进一步的调试策略?