首先,我通过故意编辑default.natstepfilter文件来测试这个功能。我意识到现在只有我的代码特性内置到visual中,并且有一个相关的编译器设置了/JMC。然而,我仍然有一个使用旧的VS2013工具构建的遗留项目,所以我不能使用更新的、只使用我的代码特性来避免进入STL和其他库函数。因此,我设置了一个简单的hello world示例,以了解如何使用下面这两篇文章中描述的技术。
在阅读了这两篇文章之后,过滤器略有不同。我尝试过两种方法,有和没有转义冒号字符,但似乎都不起作用。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才能进入printGreeting,因此这是我验证对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()方法的构造函数。
发布于 2022-03-14 22:10:08
我认为我通过重新开始并创建一个具有.natstepfilter扩展名的新文件解决了自己的问题。我无法证明文件中的错误是问题所在,因为我尝试过的以前的文件已经被更改或删除了。但是,我很有信心在我编辑的.natstepfilter文件中有一个错误。通过故意插入一个错误,我能够再次重现这个问题。在我最初的文章中,我的xml示例条目是错误的。它没有尾随的标签。当我从浏览器窗口复制和粘贴示例时,可能没有复制整行,也可能复制了其他内容。这也可能是我没有正确地复制和粘贴从我编辑的文件到原来的问题。当文件包含错误时,它将静默地无法加载。我在任何地方都找不到显示加载该文件的问题的诊断输出。
我还从微软的文档中了解到,您可以创建一个新的.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 2017\可视化器目录中,这样就不必将文件添加到系统安装目录中。我必须手动创建可视化器目录,然后创建文件。如果要跨多个文件组织条目,可以添加多个扩展名的文件。
https://stackoverflow.com/questions/71474096
复制相似问题