gpt4 book ai didi

try-catch - try ... catch ... [finally] 是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 05:46:08 30 4
gpt4 key购买 nike

它几乎可以在所有语言中找到,而且我大部分时间都在使用它。
我不知道它是内部的,不知道它是如何真正起作用的。

它如何在任何语言的运行时在 native 级别工作?

例如:如果在 try 内部发生 stackoverflow 或 除零,那么 catch 如何防止程序崩溃?

最佳答案

“在任何语言的运行时都处于 native 级别”这句话是矛盾的。异常处理的所有本地部分都依赖于平台,而不是语言。异常处理的某些部分甚至依赖于硬件(例如,除以零始终是硬件异常。)

在 .NET、Windows 和 x86 上除以零的特定情况下,它是这样的:

  • 您的应用程序尝试除以零。
  • CPU 保存一些应用程序状态并执行位于陷阱表中“Divide Error”地址的代码(它恰好是陷阱表的第零个元素。)
  • 陷阱处理程序代码(它是 Windows 内核的一部分)触发机制,最终(在执行程序中)引发 SEH 异常以除以零,该异常将传播到对象管理器,然后传播到 .NET 运行时。
  • mscoree.dll 中的 .NET 运行时代码将除以零作为来自 COM 对象的 HRESULT COR_E_DIVIDEBYZERO。
  • .NET 将 HRESULT 转换为 System.DivideByZeroException。
  • 您的代码将异常视为到“最近的”封闭 catch 块或 finally 块的美化长跳转。
  • 您要么处理异常,要么将其传播到您的代码之外,然后您的应用程序崩溃。

  • 通常,您可以将异常视为携带指向某些线程本地状态信息(异常)的指针的长跳转。跳远的目标通常在编译时就知道了。

    也不是每种语言都内置了异常处理。例如,C 没有结构化异常处理。

    关于try-catch - try ... catch ... [finally] 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662503/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com