我试图让 Visual Studio 调试器在外部函数调用上按 F11(单步执行)时单步执行到特定的内部函数,
我有以下调用片段:
internal class Program
{
static void Main()
{
NonUserCodeFunc();
}
[DebuggerNonUserCode]
public static void NonUserCodeFunc()
{
LogStart();
SomeFunc();
}
private static void SomeFunc()
{
Console.WriteLine(MethodBase.GetCurrentMethod().Name);
}
public static bool DoLog { get; set; } = true;
[DebuggerNonUserCode()]
private static void LogStart()
{
if (DoLog)
{
Console.WriteLine("Start");
}
}
}
我的目的是当用户在主程序中调用 'NonUserCodeFunc' 时按 F11 时,使调试器进入 'SomeFunc'。
只有当'LogStart'函数中的条件行被注释掉时,我才能实现这一点。 为什么会这样?
只有当'LogStart'函数中的条件行被注释掉时我才能实现这一点
根据我的测试结果,这是 DebuggerNonUserCodeAttribute 的奇怪行为。看来您在 Visual Studio 中的一些调试设置错误。
当您使用
DebuggerNonUserCode
时,此属性将代码标记为 External Code
,您将不会命中断点或单步执行用此属性标记的代码。
测试结果:
您可以关闭
Just My Code” (JMC)
设置以忽略该属性。
请检查您是否启用
Just My Code
并确保禁用此功能。
在“工具”>“选项”(或“调试”>“选项”)>“调试”>“常规”下,取消选择“仅启用我的代码”。
此外请检查您是否已启用
Step over properties and operators (Managed only)
。
在“调试”>“常规”页面上,清除“跳过属性和运算符(仅限托管)”复选框。
总结一下,如果您想让调试器在主程序中调用“NonUserCodeFunc”时按 F11 时进入“SomeFunc”,请确保您已清除调试设置上的
Step over properties and operators
.
希望能帮到你。