Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VS2015中,如何禁用自动实现属性的单步执行?_C#_Debugging_Visual Studio 2015_Visual Studio Debugging - Fatal编程技术网

C# 在VS2015中,如何禁用自动实现属性的单步执行?

C# 在VS2015中,如何禁用自动实现属性的单步执行?,c#,debugging,visual-studio-2015,visual-studio-debugging,C#,Debugging,Visual Studio 2015,Visual Studio Debugging,我刚刚开始使用Visual Studio 2015,发现在调试自动实现的属性时,它的行为与VS2012/VS2013不同 假设我在类中定义了一个属性: public int MyProperty { get; set; } 一个自动实现的属性,其中getter和setter由编译器有效地生成 稍后我可能会将此属性作为方法调用的一部分引用,例如: { DoSomeStuff(MyProperty); } 如果我想调试对DoSomeStuff的调用,并在该行上放置一个断点,然后等待它被命

我刚刚开始使用Visual Studio 2015,发现在调试自动实现的属性时,它的行为与VS2012/VS2013不同

假设我在类中定义了一个属性:

public int MyProperty { get; set; }
一个自动实现的属性,其中getter和setter由编译器有效地生成

稍后我可能会将此属性作为方法调用的一部分引用,例如:

{
    DoSomeStuff(MyProperty);
}
如果我想调试对
DoSomeStuff
的调用,并在该行上放置一个断点,然后等待它被命中并F11进入调用,VS2015调试器现在会进入
MyProperty
的getter(在以前的版本中,对于自动实现的属性,它只会忽略getter和setter)

我发现了一个新特性,它描述了在自动getter和setter上放置断点的能力,我可以看出这在某些情况下是多么有用。然而,在我的例子中,我对断点或进入这些方法不感兴趣,特别是因为我们的代码库有许多自动实现的属性,并且对它们的访问通常是嵌套的(例如,
DoSomeStuff(X.Y.Z)

简而言之,是否可以在VS2015中禁用自动实现属性的新行为步骤,如果可以,如何禁用


(我注意到调试选项中有一个“跳过属性和运算符”复选框,但我不想跳过所有属性getter/setter,只是那些自动实现的属性。)

转到VS2015选项->调试->常规并勾选“跳过属性和运算符”.

只需将DebuggerStepThrough属性添加到函数/类中即可

[DebuggerStepThrough]
public class DontDebugInterceptor : IInterceptor
{
    // do something...
}
在Visual Studio 2017中:

将调试器暂停在方法调用的行上->右键单击该方法->进入特定->[从列表中选择您的方法]


这不是一个配置健壮的解决方案,而是每次您想要输入一个方法并避免属性进入时都应该执行的操作。

通常,最好是
几乎一直跳过属性
,并且只在实际需要调试特定属性代码时才介入。上下文菜单有许多与单步执行相关的选项。我编辑了我的答案,告诉您如何更改常规行为。我已将此标记为一个答案,尽管它有点核心:防止单步执行不仅针对自动实现的属性,而且针对所有属性。非常恼人的是,没有办法阻止其中一个而不是另一个,特别是因为这是早期版本与早期版本相比的行为变化。