15

我遇到过几篇文章/博客,它们展示了如何使用注册表项禁用单步执行特定函数和/或命名空间(例如,boost 库)。

当我尝试使用 VS2012 执行此操作时,我没有得到预期的结果。

我试过了...

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\NativeDE\StepOver]
"10"="std\:\:.*"
"20"="boost\:\:.*"

格式变了吗?我有正确的注册表项吗?

4

2 回答 2

28

我终于找到了一个“解决方案”:

将新的 .natstepfilter 添加到 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers

<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
  <Function><Name>boost::.*</Name><Action>NoStepInto</Action></Function>
  <Function><Name>std::.*</Name><Action>NoStepInto</Action></Function>
</StepFilter>

我不肯定“boost::.*”格式在这个特定的例子中是正确的,但它应该是这个或类似的东西。您可以查看文件夹中的其他 .natstepfilter 文件以获取更多线索。

不幸的是,根据我发现的一篇文章,在调试混合模式(例如,C++/C#)应用程序时这样做不起作用,这就是我正在做的事情。我将把这个问题留给试图弄清楚如何实现此功能的其他人以及任何可能知道在混合模式下执行此操作的方法的人。

于 2012-09-23T08:04:24.477 回答
4

作为上一个答案的附录(不幸的是我还不能评论),该目录中已经有一个名为 default.natstepfilter 的文件,您可以在其中添加两行(在 之前</StepFilter>)。

您可能必须右键单击 default.natstepfilter 并转到Properties并取消选中Read-Only才能更改此文件。为此,您需要管理员权限。

示例

<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
  <Function><Name>std::.*</Name><Action>NoStepInto</Action></Function>
  <Function><Name>__security_check_cookie</Name><Action>NoStepInto</Action></Function>
  <Function><Name>__abi_winrt_.*</Name><Action>NoStepInto</Action></Function>
  ...
</StepFilter>
于 2014-08-13T08:05:43.380 回答