C# Visual Studio 2019中断已处理的异常(C)
我在try-catch块中有一些代码,可能会抛出异常 异常在catch块中处理 该代码在VS 2017下工作。但是,切换到VS2019后,调试器将不会继续(请参见屏幕截图) 如何告诉调试器“否”在已处理的异常处中断? [编辑] 在这种特殊情况下,可以通过更仔细的代码轻松地避免异常,或者通过取消选中“抛出此异常类型时中断”来禁用异常 然而,这不是我的问题 我的问题是: 为什么阿尔拉迪的2019年VS休息会处理例外情况?C# Visual Studio 2019中断已处理的异常(C),c#,exception,visual-studio-2019,C#,Exception,Visual Studio 2019,我在try-catch块中有一些代码,可能会抛出异常 异常在catch块中处理 该代码在VS 2017下工作。但是,切换到VS2019后,调试器将不会继续(请参见屏幕截图) 如何告诉调试器“否”在已处理的异常处中断? [编辑] 在这种特殊情况下,可以通过更仔细的代码轻松地避免异常,或者通过取消选中“抛出此异常类型时中断”来禁用异常 然而,这不是我的问题 我的问题是: 为什么阿尔拉迪的2019年VS休息会处理例外情况? 我怎么能告诉它不这样做呢?有许多异常(默认情况下)会中断执行,即使您有一个“
我怎么能告诉它不这样做呢?有许多异常(默认情况下)会中断执行,即使您有一个“全面覆盖”<代码>系统。NullReferenceException就是其中之一 但是,正如您在屏幕截图的弹出窗口中看到的,您可以选择“关闭”此特定异常。当前已选中:“在引发此异常类型时中断” 取消选中此框,然后重试
(您可以在此菜单选项中进一步调整异常设置:Debug/Windows/exception settings。)有许多异常(默认情况下)会中断执行,即使您有一个“全面捕获”<代码>系统。NullReferenceException就是其中之一 但是,正如您在屏幕截图的弹出窗口中看到的,您可以选择“关闭”此特定异常。当前已选中:“在引发此异常类型时中断” 取消选中此框,然后重试
(您可以在此菜单选项中进一步调整异常设置:Debug/Windows/exception settings。)关于为什么这会是“糟糕的做法”,已经有很多人在讨论了 也就是说,有
debuggerStepThrough
确保阅读文档以理解其含义-例如,您需要启用JMC
同样,当你做这些肮脏的异常检查时,请尽可能具体,以避免意外
try
{
var x = MyFunc();
// We do a check here that will throw an exception
var y = ThisFuncWillThrowNullRef(x);
}
catch(exception)
{
// ALL exceptions are swallowed
// What if MyFunc() throws an exception instead of the second function? what do we do then?
}
编辑;在我使用的应用程序中,即使我们像您现在这样“吞咽”异常,我们也会显式详细地记录异常。总是。修复异常比不知道发生了什么更容易,而且随着你的应用程序越来越大,会有越来越多的异常发生。关于为什么这会是一种“坏习惯”,已经有很多人说了 也就是说,有
debuggerStepThrough
确保阅读文档以理解其含义-例如,您需要启用JMC
同样,当你做这些肮脏的异常检查时,请尽可能具体,以避免意外
try
{
var x = MyFunc();
// We do a check here that will throw an exception
var y = ThisFuncWillThrowNullRef(x);
}
catch(exception)
{
// ALL exceptions are swallowed
// What if MyFunc() throws an exception instead of the second function? what do we do then?
}
编辑;在我使用的应用程序中,即使我们像您现在这样“吞咽”异常,我们也会显式详细地记录异常。总是。修复异常比不知道发生了什么更容易,而且随着你的应用程序越来越大,会有越来越多的异常发生。[编辑:这个问题不是关于正确的处理,而是破坏行为。所包含的示例当然不是推荐的处理] 根据Mattias Larsson的回答,默认情况下,许多异常总是会中断执行,无论它们是否得到处理。
System.NullReferenceException
就是其中之一。为了防止出现这种情况,当抛出此异常类型时,可以取消选中“中断”框。这样做将导致以下行为:
如前所述,在未处理时,您希望调试器在
系统上继续中断。NullReferenceException
;这是标准行为,因为这样的异常是关键的,即不可恢复的(也许有更好的术语?)。[编辑:这个问题不是关于正确的处理,而是破坏行为。所包含的示例当然不建议处理]
根据Mattias Larsson的回答,默认情况下,许多异常总是会中断执行,无论它们是否得到处理。System.NullReferenceException
就是其中之一。为了防止出现这种情况,当抛出此异常类型时,可以取消选中“中断”框。这样做将导致以下行为:
如前所述,在未处理时,您希望调试器在
系统上继续中断。NullReferenceException
;这是标准行为,因为这样的异常是关键的,即不可恢复的(也许有更好的术语?)写一条评论而不是留下不喜欢的内容,会更受欢迎只要删除“抛出异常类型时中断”。或者在异常设置中禁用“NullReferenceException”。但是,我不建议这样做。您永远不应该捕获这样的一般异常,您最好对注释进行NULL检查.Thx。然而,这不是我要问的。我想知道为什么VS2019决定在未处理异常时中断,以及我如何告诉它不要这样做。写一条评论而不是留下不喜欢的内容,会更受欢迎只要删除“抛出异常类型时中断”。或者在异常设置中禁用“NullReferenceException”。但是,我不建议这样做。您永远不应该捕获这样的一般异常,您最好对注释进行NULL检查.Thx。然而,这不是我要问的。我想知道为什么VS2019决定在未处理异常时中断,以及我如何告诉它不要这样做。我可以看到这个选项。然而,我确实希望VS在这种类型的异常时中断,只要它未被处理。据我所知,如果您未捕获异常,即使您取消选中此框,调试器也应停止。在异常设置中,它似乎只有exc