提问人:Carl Schmidt 提问时间:3/4/2023 最后编辑:Carl Schmidt 更新时间:3/8/2023 访问量:410
Visual Studio C# - 不要中断此行的任何异常
Visual Studio C# - Don't break for any exception at this line
问:
我的代码经常抛出.在这种特定情况下,异常实际上是可以的,我不希望调试器在抛出时中断。但是,我不能禁用所有中断,因为这只是一个坏主意。InvalidOperationException
InvalidOperationException
据推测,or 属性是我需要的,但异常冒泡并忽略该块 - 调试器无论如何都会中断。DebuggerStepThrough
DebuggerHidden
try
internal class Program
{
static void Main(string[] args)
{
// The debugger breaks at this line.
// Ideally it should continue execution.
var x = TestFunc();
}
[System.Diagnostics.DebuggerHidden]
private static bool TestFunc()
{
try
{
// The actual code is third-party; I can't control the exception.
throw new InvalidOperationException();
}
catch (InvalidOperationException)
{
return false;
}
catch
{
throw;
}
}
}
相关问题:
如何不破坏异常?(这不起作用,因为无法确定异常的来源。堆栈跟踪仅指向第三方代码,而不是我的调用代码。
当调试器被抛出和捕获时,不要在该异常处停止调试器(这会导致上述冒泡和规避。
使用 VS 2022
答:
1赞
wenbingeng-MSFT
3/6/2023
#1
您需要转到“工具”>“选项”>“调试”>“常规”>选择“仅启用我的代码(仅托管)”。
然后,使用 DebuggerNonUserCodeAttribute 告知调试器该函数不是代码的一部分。
[System.Diagnostics.DebuggerNonUserCode()]
private static bool TestFunc()
{
try
{
throw new InvalidOperationException();
}
catch (InvalidOperationException)
{
return false;
}
catch
{
throw;
}
}
如果它仍然不起作用,请告诉我。
评论
0赞
Carl Schmidt
3/7/2023
这与属性具有相同的效果;Visual Studio 在调用 时中断。DebuggerHidden
TestFunc()
0赞
wenbingeng-MSFT
3/7/2023
@CarlSchmidt 嗨,您提供的示例代码和我提供给您的代码,当我使用控制台进行测试时,它不会中断。所以我的猜测是您的异常设置有问题。请按照以下步骤操作:Debug=>Windows=>Exception Settings。右键单击下面的所有选项,然后单击恢复默认值。
0赞
Carl Schmidt
3/8/2023
#2
这在 Visual Studio 中似乎是不可能的。你要么告诉它在异常时中断(调试 -> Windows ->异常设置,检查异常)或忽略它。我可以忍受单击“继续”按钮(或 F5)几次。
评论
0赞
Carl Schmidt
3/11/2023
...哼?你完全误读了我的答案。答案很简单,我想要的东西目前是不可能的。是的,这些评论帮助我得出了这个结论,但不,这个结论不在任何人的评论中。这就是我做出答案的原因。祸兮福所倚,因为我把它说得很清楚,让每个人都看到。
评论
InvalidOperationException
catch (InvalidOperationException)
System.Diagnostics.DebuggerHidden