C# 有没有办法忽略函数的DebuggerHidden和DebuggerStepThrough属性?
我有一些代码,我真的想进入,并获得更多的信息了。不幸的是,该函数被标记为[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本地托管符号的服务器功能。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
这使我能够查看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 */