如何使用DebuggerHidden属性在C#中的调试器中隐藏方法

在C#中,允许您以编程的方式设置某些行为,并且调试器在运行时遵循相同的行为。C#具有称为属性的独特功能,该属性是一个声明性标记,用于通过程序中的各种元素(如类,方法,结构,枚举器,程序集)将信息传达给调试器运行时行为。在C#中,属性提供了一种将声明性信息与C#代码(类型,方法,属性等)相关联的强大方法。在本文中,将学习如何使用DubuggerHidden 属性声明式,该声明式对c#中的调试器隐藏方法。

在Visual Studio中,您已经意识到在代码中使用断点的好处。当执行控制达到您的断点并且应用程序进入调试模式时,代码执行将自动暂停或暂停。此外,您将有几个选项可以轻松调试代码。在调试模式下,您可以查看对象,调用堆栈等的快照。如您所见,调用堆栈包含所有调用方法的跟踪,异常跟踪,异常消息等。
假设您的代码包含很少的方法,这些方法仅绕过对其他方法的调用,而没有编写任何其他有助于调试的业务代码。对于此类方法,您希望调试器在调试时不会命中或介入。但是,它可能会减少调试时间。
例如,以下代码分别在方法AddTwoNumbers 和方法Add 处有两个断点。在方法AddTwoNumbers中, 无需编写其他任何业务逻辑,只需调用Add 方法来计算两个数字的和。在这种情况下,典型的调试会遇到两个断点。

如果您的应用程序是使用事件驱动的分层体系结构开发的,则在调试过程中代码的友好程度需要特别考虑。为了构建这样的调试环境,您需要编写一些特殊的代码来避免调试这样的方法,从而使您可以更快地调试活动。

在C#中从调试器隐藏方法:

如果DebuggerHidden属性附带了任何方法,则Visual Studio调试器将在调试过程中忽略该方法。在这种情况下,如果此方法中插入的任何断点将永远不会命中。

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace CalculatorDemo
{
class Program
{
static void Main(string[] args)
{
int nResult = AddTwoNumbers(10, 20);
}
[DebuggerHidden()]
private static int AddTwoNumbers(int nNum1, int nNum2)
{
return Add(nNum1, nNum2);
}
private static int Add(int op1, int op2)
{
return op1 + op2;
}
}
}

DubuggerHidden 初始化的新实例Systems.Diagnostics.DebuggerHiddenAttribute类。调试器跳过单步执行方法AddTwoNumbers ,断点将不会出现。但是,您可以在堆栈跟踪中看到 AddTwoNumbers,因为它是调试流程的一部分。

posted @ 2020-03-19 12:05  tinys  阅读(1190)  评论(1编辑  收藏  举报