有人在论坛上问过关于在混合模式下编辑并继续(EnC)的问题。不能在启用混合模式(interop)调试的情况下使用托管EnC。这是CLR调试服务的一个限制。互操作调试和EnC都是复杂的特性;将它们结合起来将是一个巨大的测试矩阵,而且成本非常高。因此,如果你有C和本地C++解决方案,你的选择是:
- 如果只想调试+编辑C#代码,则可以使用仅托管调试。
- 如果你想调试+编辑只是本地C++代码,你可以使用纯本地调试。
- 如果您想调试C#和本机C++代码(但不编辑),可以使用互操作调试。
托管调试和本机调试基本上都有自己的实现(单步执行、调用堆栈、断点、检查)。互操作调试将这两个世界粘在一起。EnC也一样。在托管代码中执行EnC与在本机代码中执行EnC完全不同,并且使用完全不相交的调试功能。因此,虽然托管EnC不能在interop下工作,但调试器可以编写本机EnC支持(我不知道VS是否允许本机EnC)。
这在MC++中也很有趣。如果将C++编译到IL,那么它是托管代码,需要托管调试服务。如果将C++编译为本机,则是本地代码,并使用本机调试服务。由于Mc++使IL和本地(以及产生混合汇编)都非常容易编译C++,所以调试MC ++通常默认为互操作调试。