【问题标题】:How to stop Blazor from catching exceptions?如何阻止 Blazor 捕获异常?
【发布时间】:2020-07-16 20:33:26
【问题描述】:

我在 Visual Studio 中开发了一个服务器端 Blazor 应用程序,我的应用程序使用 Kestrel Web 服务器。 我可以使用调试器,我至少尝试使用它。 当我在代码的任何点设置任何断点时,会触发断点,显示 Visual Studio 调试器,一切都像在任何其他 NORMAL .NET 应用程序中一样工作。

我试图实现的是调查/调试在 Blazor 应用程序的 C# 代码中引发的异常。没错——它是一个组件代码。我在我的应用程序 UI 中单击一个按钮,调用了一个事件处理程序,它开始执行代码,我可以插入一个断点,因此 VS 停止程序执行并向我显示包含断点、变量值和所有内容的行。很奇怪,我什至在解释它。

但是,如果我的程序中发生异常,则不会显示 Visual Studio 调试器。异常在 Blazor 中被截获并改为显示到控制台。它使应用程序的调试变得非常乏味和烦人的琐事。至少可以说,它还增加了大约 10 倍的开发时间。

我几乎可以肯定 Blazor 的设计不会那么愚蠢,并且必须有一个选项允许正常调试它,使用已经连接并工作的调试器。捕获错误并将它们记录到控制台或其他日志对于已部署/已发布的应用程序是有意义的。对于开发,尤其是在 Visual Studio 中的调试会话中 - 应将异常发送到调试器。所以必须有一个选项来启用这种基本行为,对吗?

我赌的是 appsettings.json 文件。

我花了几个小时试图在 Google 和 Microsoft Docs 上找到这些信息,但似乎我是世界上第一个提出这个问题的人,或者我就是找不到正确的问题,或者......

我真的是世界上第一个尝试使用 Visual Studio 调试器来调试我的代码中的异常的人。我的意思是在 Blazor 中。因为我搜索了“在 Visual Studio 中调试异常”,它返回了明显的(至少对我而言)结果,例如 VS 调试器显示异常的图片。但如果我只在问题中添加“Blazor”,那么结果就会很疯狂而且完全不相关。

有趣的事实:在我的代码中使用NavigationManager.NavigateTo("/Identity/Account/Login") 时,Visual Studio 实际上会在异常时停止,这并不是真正的异常。我的意思是 GitHub 上的 Blazor 开发人员说,异常是它的正常运行方式。功能不是错误。因此,当我的应用程序执行正常的、预期的事情并且完全正常工作时 - 突然显示 Visual Studio 调试器并且我看到我不关心的异常。当我的程序执行无效操作(发生真正的异常)时 - Visual Studio 调试器不显示。该事件是隐藏的,我要么必须猜测发生了什么,要么编写一些额外的代码来调查。如果这不是疯了,我不知道是什么。

顺便说一句,我知道有解决方法。我没兴趣。我可以使用Debug.Print,我可以插入断点并逐步分析执行的代码。我只想让调试器按预期自动运行,而不隐藏异常。

【问题讨论】:

    标签: c# visual-studio debugging blazor


    【解决方案1】:

    它按设计工作:)。 Blazor 或任何其他 asp.net 框架在请求处理流程中的某处都有 try/catch 块。如果抛出任何异常,它只是不终止整个应用程序。所以异常被捕获,调试器不会通知你。

    您可以将调试器配置为在抛出任何异常时中断。查看docs

    【讨论】:

    • 我知道异常应该如何工作。问题是 - 捕捉不应被捕捉的异常是疯狂的。在开发过程中,它们不应被 Blazor 或框架的任何部分捕获。任何框架都可以(并且可能应该)捕获自己的异常,但不能捕获用户的异常。我明确询问如何阻止 Blazor 捕获异常。我寻找一个选项来禁用这种疯狂的行为。 NET Framework 或 Entity Framework 不会捕获用户代码异常。这不正常。 Try / catch 块供程序员使用。
    • 但是好的,VS 设置是一个有效的解决方法。我几乎不需要更改 VS 中的默认设置。尽管如此,这是代表 Blazor 的滥用行为。它与使用 try / catch 块而不是 File.Exists() 的代码气味相似。所以...接受了。
    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2010-09-26
    相关资源
    最近更新 更多