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

19

我在Visual Studio 2013测试框架中有一个C#单元测试,用于测试CLI和本地代码。我想在执行C#单元测试时调查代码的本地部分。然而,运行测试-> 调试-> 所有测试会运行托管调试器,因此无法击中本地代码中的断点,并且无法像在混合模式调试器下运行程序时那样从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 ) ); 
}

查看单元测试项目的项目设置,发现在调试(Debug)选项下所有的设置都被禁用了,因此无法勾选"启用本机代码调试" (Enable Native Code Debugging),而这是一个普通程序所允许的行为。

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


我正在使用VS2013更新4,复选框“启用本机代码调试”可用。你在使用哪个版本的VS? - codingadventures
2个回答

19
  1. 进入属性页面您的单元测试项目(在“解决方案资源管理器”中右键单击项目,然后单击“属性”)
  2. 进入“调试”选项卡(左侧列表中从上往下第四个)
  3. 启用“启用本机代码调试”复选框
  4. 调试您的单元测试 - 您可以在本机或托管代码中设置断点,并且可以步入任何一种代码。

我之前遇到了与您相同的问题,并通过这些步骤使其工作。在启用此复选框之前,它不起作用。 记录一下,我正在使用VS2013更新4。

输入图片说明


-1

我不知道在VS中调试本地代码的方法。如果你想了解为什么两个对象不相等,你需要检查在“equals”调用中发生了什么比较。

尝试阅读这个:https://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx

由于MyCLIObjectRoundtripXml不是相同类型,除非MyCLIObject中的比较正在寻找那种类型的RoundtripXml,否则我期望它总是返回false

你可以调用:

Assert.IsTrue( roundtripped.Equals(obj) ); 

然后看看RoundtripXml类版本的Equals()中发生了什么(假设它不是cpp/native)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接