在Visual Studio 2013中对托管单元测试使用混合模式调试

Chr*_*ris 17 c# mixed-mode unit-testing visual-studio-2013

我在Visual Studio 2013测试框架中进行了C#单元测试,该测试框架运行CLI和本机代码.我想在执行C#单元测试时调查代码的本机部分.但是,运行Test - > Debug - > All Tests运行托管调试器,因此本机代码中的断点不会被命中,我无法跟踪C# - > C++/CLI代码,就像在混合模式调试器下运行程序一样.

例如,我的单元测试中的代码:

[TestMethod]
public void TestRoundTripEvaluate()
{
     var obj = new MyCLIObject();
     var roundtripped = RoundtripXml( obj );

     // I would like to trace into here to see why Equals returns false.
     // But the definition for MyCLIObject is in a CPP file and cannot be navigated 
     // to running the unit test because Visual Studio starts the debugger as "managed only"
     // when using Test -> Debug -> All Tests
     Assert.IsTrue( obj.Equals( roundtripped ) ); 
}
Run Code Online (Sandbox Code Playgroud)

查看单元测试项目的项目设置,Debug下的所有内容都被禁用,因此我无法检查启用本机代码调试,这允许正常程序的此行为.

在运行VS C#单元测试时,如何启用混合模式调试或仅本机调试?

Nik*_*Nik 15

  1. 转到单元测试项目的属性页面(在解决方案资源管理器中右键单击项目,然后单击"属性")
  2. 转到"调试"选项卡(左侧列表顶部的第4个)
  3. 启用"启用本机代码调试"复选框
  4. 调试单元测试 - 您可以在本机代码或托管代码中设置断点,并且可以使用任何一种代码.

我遇到了和你一样的问题,并且能够使用这些步骤使其工作.在启用此复选框之前,它不起作用.为了记录,我正在使用VS2013更新4.

在此输入图像描述