在Visual Studio 2017中调试C++应用程序会进入不是我的代码,有办法把它关掉吗?

fdx2calv  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(191)

好的,那么当调试时,例如当我在简单的字符串声明上设置断点时

string a;

然后按f11(单步执行)我的调试器单步执行xstring文件,我不想要它。我希望它只进入我的代码。这在C#项目中很好用,但在C项目中就不行了。
我是如何在Visual Studio中为C
项目定义它的:

我如何在C#中使用它,它在哪里工作得很好:

我已经启用了“只是我的代码”,我不知道该怎么办。我只是不想让它介入,而不是我的文件。

xa9qqrwz

xa9qqrwz1#

你提到的C#特性叫做“Just My Code”。不幸的是,Visual Studio没有以与C相同的方式实现它。documentation说:
C
Just My Code与.NET Framework和JavaScript Just My Code不同,因为单步执行行为独立于调用堆栈行为。
但是,有一个解决方案:
您可以创建自己的.natstepfilter.natjmc来自定义%USERPROFILE%\My Documents\Visual Studio 2015\Visualizers中的步进和调用堆栈窗口行为。
尽管文档中有错别字(“2015”),而且设计的方式非常复杂,但这个技巧实际上是有效的!
例如,在我的机器上安装了Visual Studio 2017,我可以转到C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Packages\Debugger\Visualizers和一个名为.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>

现在,当我在Visual Studio中调试并“进入”某些内容时,所有C++标准库函数都被跳过。
请注意,VisualStudio并没有非常严格地验证XML文件的实际格式。我实际上使用了Visual Studio 2015 documentation中解释的更简单的形式。

j8ag8udp

j8ag8udp2#

Visual Studio 2017版本15.8附带了对C项目的“Just My Code”的改进支持,如documentation中所述:
从Visual Studio 2017版本15.8开始,还支持用于代码单步执行的Just My Code。此功能还需要使用/JMC(Just my code debugging)编译器开关。在C
项目中,默认情况下启用该开关。对于“调用堆栈”窗口和“仅我的代码”中的调用堆栈支持,不需要/JMC开关。
因此,需要在Debug配置中为所有自己的C++项目设置\JMC编译器开关:

使用Visual Studio 2022进行测试,这个编译器开关工作得非常好,不再需要.natstepfilter来跳过std::.*

相关问题