C#:如何从堆栈跟踪中隐藏方法?

C#:如何从堆栈跟踪中隐藏方法?,c#,attributes,stack-trace,C#,Attributes,Stack Trace,我有一个非常简单的一行方法,我不想在堆栈跟踪中看到它:这可能吗?也许用属性标记它 我只是想澄清一下,我并没有试图打印跟踪,或者重新刷新,或者在调试器中自动单步执行。我首先不希望该方法出现在跟踪中,因为跟踪随后由一些第三方代码处理。我想要在运行时控制,我对调试不感兴趣。 我这么说是因为我在StackTrace上读到的大部分内容似乎都是关于这些主题的。这只能在方法内联时完成。要么由JIT完成,要么由您自己完成(更改代码)。然而,JIT对于内联方法非常保守,实际上只在方法非常小或在循环中使用该方法时才

我有一个非常简单的一行方法,我不想在堆栈跟踪中看到它:这可能吗?也许用属性标记它

我只是想澄清一下,我并没有试图打印跟踪,或者重新刷新,或者在调试器中自动单步执行。我首先不希望该方法出现在跟踪中,因为跟踪随后由一些第三方代码处理。我想要在运行时控制,我对调试不感兴趣。
我这么说是因为我在StackTrace上读到的大部分内容似乎都是关于这些主题的。

这只能在方法内联时完成。要么由JIT完成,要么由您自己完成(更改代码)。然而,JIT对于内联方法非常保守,实际上只在方法非常小或在循环中使用该方法时才这样做。

正如在回答其他问题时所说,您需要为您的方法指定System.Diagnostics.DebuggerHidden属性。

如果它是一个简单的单内联方法,那么它是自动的。JIT优化器将内嵌它。但是,当你附加了调试器时就不行了。汉斯,请看我对史蒂文答案的评论。别忘了标记你最喜欢的答案;-)这回答了你的问题吗@muibinecarlota您是指您在底部()对[StackTraceHidden]的评论?是的,看起来正是我想要的!。。。当它被公开的时候。我想知道我们是否可以通过重新定义属性来绕过公共性,就像老的ExtensionAttribute hack()…嗯。。。老实说,我对此表示怀疑:即使它是内联的,StackTrace是否会以某种方式保持跟踪?而且,由于我的方法在debug和release中都存在,并且它只是一个单行包装器,所以它在实践中并没有验证。当一个方法内联时,它就真的消失了。因此,没有方法调用,堆栈遍历不会显示它。由于堆栈跟踪是使用堆栈遍历生成的,因此堆栈跟踪将不再显示您的方法。不幸的是,这不适用于此处,顾名思义(以及文档中的状态),它只是一个调试器属性,由调试器过滤标记的方法,但该方法仍然首先注册在堆栈跟踪中。我的上下文不是调试时间,这是针对Unity(游戏引擎),它输出完整的日志或异常堆栈,因此Unity必须有意地过滤掉这些方法。我担心我想要做的事情(根本不在堆栈跟踪中注册)是不可能的。