我为这个含糊不清的主题道歉,但我在这方面缺乏经验,并且无法提出更具体的内容。
我正在调试加载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,则应用程序会正确报告该错误。
有人可以推荐进一步的调试策略吗?