我的VC++中的C++代码

如果您有在visualstudio中调试C#或visualbasic代码的经验,您可能熟悉一种称为justmycode(JMC)的调试特性。 在VisualStudio 2013中,我们只介绍C++的代码。 在VS2013中,这个C++的JMC功能的目标是帮助用户在查看调用堆栈时关注代码,而不会丢失库代码、Windows代码等。

null

用户体验

在查看调用堆栈时,调试器会将所有非用户代码的连续帧折叠为标记为[External code]的带注释帧。 有一个例外,如果应用程序在非用户代码中停止,那么调用堆栈顶部的外部代码将显示出来。

让我们从最基本的例子开始。 如果在Visual Studio 2012中(或在关闭JMC的VS2013中)创建新的Win32控制台应用程序并在第一行设置断点,则将获得以下调用堆栈:

1basicstack

对于大多数用户来说,只有顶部框架才是真正有趣的部分。 Just My Code功能将调用堆栈简化为:

2basicstackjmc

只是我的代码不仅适用于调用堆栈窗口,而且适用于显示调用堆栈的任何地方。 例如,您可以在“线程”窗口中获得这些相同的好处:

3threads

或在“并行堆栈”窗口中:

4parallelthreads

JMC在有大量库代码使您很难找到自己的代码的情况下非常有用。 在调试Windos商店应用程序时,请考虑以下示例。  调用堆栈是如此的笨拙,以至于你看不到你所关心的用户代码,即使你取消停靠调用堆栈窗口并将其扩展到接近最大的大小。

5bigstack

只需我的代码就可以更简单地找到您的代码,以便您可以导航到它。

6bigstackjmc

关闭和打开JMC

如果确实要查看外部代码,可以使用“调用堆栈”窗口中的上下文菜单在显示和隐藏外部代码之间切换。

7contextmenu

关闭此选项后,“仅我的代码”将以浅灰色显示外部调用堆栈帧。

8graystack

如果要完全关闭“仅我的代码”,可以在“工具”->“选项”中更改设置。

9toolsoptions

自定义非用户代码

虽然JMC有一个开箱即用的默认体验,但是如果您选择的话,您可以根据自己的喜好进一步定制它。 非用户代码在xml文件中定义,扩展名为.natjmc,位于两个位置之一。

%%VSINSTALLDIR%%Common7PackagesDebuggerVisualizers调试工具

%%USERPROFILE%%My Documents Visual Studio 2012可视化工具

这些位置与处理本机可视化工具时使用的位置相同( natvis文件 ). 默认设置在%%VSINSTALLDIR%%Common7PackagesDebuggerVisualizersdefault.natjmc中,并提供了一个完整的示例,说明如何将代码定义为非用户。

xml

如您所见,您可以在三个不同的级别上将代码定义为非用户:

  • 按模块
  • 按文件
  • 按功能

名称匹配允许使用*和?因此,只需添加一行xml,就可以充分涵盖很多情况。 对于模块,还可以包含公司名称,该名称将与生成文件时包含的公司名称相匹配。 例如,如果system32中的模块来自Microsoft,那么下面一行将它们定义为非用户代码。 但是,如果您将自己的代码安装到该目录中,它仍将被视为用户代码。

< 模块 姓名 = ?:WindowsSystem32*.dll 单位 = 微软公司 />

此外,对于文件和函数,可以包含模块名,使其更具体。 例如,下面的一行将在kernel32.dll中包含RaiseException作为非用户代码,但不会在不同的二进制文件中包含相同名称的函数。

< 功能 姓名 = 引发异常 模块 = 内核32.dll 例外实施 = 是的 />

如前所述,当应用程序在代码中停止时,调试器仍将在堆栈顶部显示外部代码。 ExceptionImplementation属性将异常应用于该规则以隐藏引发异常的代码。

我们很乐意听到任何问题或意见,你在下面的评论或我们的网站 MSDN论坛 .

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享