visual studio 2017必须做些什么才能使用natstepfilter文件来避免进入std库函数和类方法



首先,我通过故意编辑default.natstepfilter文件来测试此功能。我意识到现在visualstudio中只内置了一个我的代码特性,以及一个相关的编译器设置/JMC。然而,我有一个遗留项目,它仍然是使用旧的VS2013工具构建的,所以我不能只使用我的代码功能来避免进入STL和其他库函数。因此,我设置了一个简单的helloworld示例来了解如何使用下面两篇文章中描述的技术。

阅读了这两篇文章后,过滤器略有不同。我尝试了两种方法,无论是否转义冒号,但似乎都不起作用。https://blog.wholetomato.com/2020/08/18/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio/https://www.asawicki.info/news_1486_how_to_make_visual_studio_debugger_not_step_into_stl.html

请考虑此代码。当进入使用c字符串的printGreeting时,我不想进入std::string的c_str((方法,但我必须单击f-11才能进入printGreetine,所以这是我验证对default.natstepfilter的更改是否有效的测试用例。

我试过上述网站推荐的这两条线,但似乎都没有效果。我不认为结肠的逃逸是必要的,但这就是一个例子所展示的

<Function><Name>std::.+ </Name><Action>NoStepInto</Action>
<Function><Name>std::.* </Name><Action>NoStepInto</Action>

这是示例代码。

#include "pch.h"
#include <iostream>
using namespace std;
void printGreeting(const char* greeting) {
std::cout << greeting << std::endl; 
}
int main()
{
std::string greeting("Hello World!n");
printGreeting(greeting.c_str());
}

在编辑了.natstepfilter后,我也尝试重新启动visualstudio2017,但没有效果。调试器仍然进入std::string的构造函数和c_str((方法。

我想我通过重新开始并创建一个扩展名为.natstepfilter的新文件解决了自己的问题。我无法证明文件中的错误是问题所在,因为我以前尝试的文件已经被更改或删除。但是,我确信我编辑的.natstepfilter文件中存在错误。我有目的地插入一个错误,使问题再次出现。在我最初的帖子中,我的xml示例条目是错误的。它缺少尾随标签。当我从浏览器窗口复制和粘贴示例时,可能没有复制整行,或者我复制了一些额外的东西。也有可能是我没有正确地将编辑过的文件复制粘贴到原始问题中当文件包含错误时,将无法以静默方式加载。我在任何地方都找不到显示加载该文件时出现问题的诊断输出

我还从Microsoft文档中了解到,您可以使用自己喜欢的任何名称创建一个新的.natstepfilter文件,而不是修改默认名称,因此更喜欢这种方法,以避免在原始文件中引入错误。这是我创建的文件的内容,它确实为我工作。

<?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>
</StepFilter>

此外,您可以将这些文件放在%USERPROFILE%\Documents\Visual Studio 2017\Visualizers目录中,这样您就不必将文件添加到系统安装目录中。我必须手动创建Visualizers目录,然后创建文件。如果希望跨多个文件组织条目,则可以添加多个具有扩展名的文件。

最新更新