提问人:BVernon 提问时间:7/11/2023 更新时间:7/12/2023 访问量:52
为什么 Visual Studio 有时会在出现错误后禁止代码继续?
Why does Visual Studio sometimes disallow code from continuing after an error?
问:
当 Visual Studio 在控制台应用程序中遇到未处理的错误时,它不会让执行继续正常,因此必须以某种方式解决该错误(例如,在“即时”窗口中设置一个值以避免 null 引用错误),或者必须将要执行的下一条语句设置为另一行代码。 或者干脆完全结束执行。
在 Asp.Net 应用程序中,通常情况并非如此。它通常允许您继续执行,这通常会导致您的浏览器转到错误页面。但是,在某些情况下,我发现它没有这样做,我必须重新启动我的应用程序,而不是让它继续进入错误页面。
我得到的一个选项是取消选中“抛出此异常类型时中断”,但当然我不想这样做,因为我确实希望它中断......我只想让它在它坏了之后继续,我按了 F5。
目前我处于这种情况,这很烦人,因为它在 lambda 表达式上,我无法(或者我认为不可能)更改要执行的下一个语句以克服错误,这意味着我必须结束执行并再次启动应用程序。
在这种情况下,阻止 Visual Studio 继续的逻辑是什么?我是否缺少任何解决方案可以让我在不重新启动应用程序的情况下继续?
答:
有几种方法可以获得调试中断和弹出窗口:
您触发了异常,但它是在上游的某个位置处理的。只有在例外列表中显式启用异常时,才会获得中断和弹出窗口,并且可以安全地从它继续到异常处理程序。
try..catch
您触发了异常,但根本没有由任何内容处理。在这种情况下,无论您的异常过滤器设置如何,您都将始终收到异常弹出窗口,并且您将无法从那里继续。您的应用程序已正式死亡,无论您在内存中编辑了什么内容,下一条指令都将终止它。您所能做的就是检查应用程序的状态,并执行一些有限的操作,因为堆栈状态不稳定。
您触发了本机异常,例如访问冲突或堆栈溢出。这很糟糕,而且再也回不来了。但更糟糕的是,您的托管堆栈跟踪不再可访问,您被困在本机世界中,下一条指令将终止您的应用程序。
评论
HandleError
评论
try/catch
it doesn't do this and I have to restart my application rather than just let it continue to the error page.
什么场合?该代码在做什么?如果您继续,这种未经处理的错误将导致整个应用程序瘫痪