C# 有没有办法忽略函数的DebuggerHidden和DebuggerStepThrough属性?

C# 有没有办法忽略函数的DebuggerHidden和DebuggerStepThrough属性?,c#,visual-studio-2015,com,C#,Visual Studio 2015,Com,我有一些代码,我真的想进入,并获得更多的信息了。不幸的是,该函数被标记为[DebuggerHidden]和[DebuggerStepThrough]。是否有任何方法可以让调试器(VS2015,更新3.14.0.25431.01)忽略该属性并插入此类代码?该代码实际上是Microsoft自己的RuntimeType.cs文件的InvokeMember方法。我正在尝试调试一个COMException(RPC_E_SERVERFAULT) 更新 我正在调试的.net代码是4.0。 我确实启用了启用.N

我有一些代码,我真的想进入,并获得更多的信息了。不幸的是,该函数被标记为[DebuggerHidden]和[DebuggerStepThrough]。是否有任何方法可以让调试器(VS2015,更新3.14.0.25431.01)忽略该属性并插入此类代码?该代码实际上是Microsoft自己的RuntimeType.cs文件的InvokeMember方法。我正在尝试调试一个COMException(RPC_E_SERVERFAULT)

更新

我正在调试的.net代码是4.0。 我确实启用了启用.NET Framework源代码步进功能,以及源服务器支持。由于.NET4.0的源符号几乎不存在,我正在利用JetBrain的dotPeek本地托管符号的服务器功能。
这使我能够查看RuntimeType.cs等文件的“源”,这使我能够直接设置断点。它还显示RuntimeType.InvokeMember被标记为[DebuggerHidden]。对于这个特定的场景,我确实禁用了调试选项“要求源文件与原始版本完全匹配”。我也有管理的和本地兼容模式打开,并且我运行的C++项目有Debugger Type的混合集。

< P>找不到绕过这一点的方法。 (甚至不使用装配步进)

但是,我成功地使用WinDBG调试了它(WinDBG使用了不同的调试引擎,它实际上不知道托管代码,所以这是预期的)

下面是示例程序(编译为my_exe.exe):

以下是我使用的步骤(WinDBG命令):

1.sxe ld:clrjit/*加载clrjit时引发异常(我发现在此阶段之前,由于某些原因,SOS延迟管理断点实际上不起作用)*/ 2.g/*继续,直到出现上述异常*/ 3.loadby sos clr/*加载sos(托管调试扩展*/ 4.!bpmd my_exe Program.Main/*在Main上设置断点*/ 5.g/*一直走到断点以上*/
一旦到了那里,您就可以按自己的意愿进入/浏览汇编代码,并在相关方法上设置其他托管断点。

取消选中“仅我的代码”在调试选项中?嗯,我已经禁用了它。正如我已经提到的,我对调试RuntimeType.cs感兴趣,这是Microsoft的代码。如果这是我的代码,我会因为拉[DebuggerHidden]而责备自己在它上面。你已经完成了所有步骤以允许单步进入方法吗?调试器不会让你单步进入方法,你必须设置断点。你自己的代码从来没有问题,即使属性也是如此。但是你忽略了调试框架代码能力的所有细节,这很重要。很公平。我刚刚更新了我的原始代码有关框架代码调试的更多信息的问题。
class Program
{
    public static void Main()
    {
        typeof(Program).
            GetMethod("Main", System.Reflection.BindingFlags.Static).
            Invoke(null, new object[] { });
    }
}
1. sxe ld:clrjit /* Raise exception when clrjit is loaded (I find that before this stage, for some reason, SOS delayed managed breakpoints don't actually work) */ 2. g /* Go till above exception is raised */ 3. .loadby sos clr /* Load SOS (managed debugging extension */ 4. !bpmd my_exe Program.Main /* Set breakpoint on Main */ 5. g /* Go till above breakpoint */