代码之家  ›  专栏  ›  技术社区  ›  Holgerwa

为什么在发生异常后执行会跳到proc的末尾?

  •  2
  • Holgerwa  · 技术社区  · 17 年前

    如果我现在继续一步一步地调试,执行将直接从创建异常的行跳到当前过程的末尾(如果没有finally块)。

    继续进行当前程序的下一行,不是同样好吗?

    5 回复  |  直到 17 年前
        1
  •  7
  •   BennyBechDk    17 年前

    异常是一种意外情况,这就是为什么处理停止的原因。

    跳转到过程末尾是一个不可见的finally语句,用于释放任何本地“分配”的内存,如字符串、接口、记录等。

    如果你想处理异常,你必须封装可以通过try发出异常的调用。.except语句,并使用“on”子句仅处理您要处理的特定异常。

        2
  •  6
  •   George V. Reilly    17 年前

    一般来说,一个未捕获的异常将在堆栈上的每个函数中执行一个隐藏的“finally”,因为它“解除”到异常处理程序。这将清理每个堆栈帧中的局部变量。在具有资源获取即初始化范式的C++等语言中,它也会导致析构函数运行。

        3
  •  3
  •   tehvan    17 年前

    在现实生活中,你也有同样的事情:如果有人让你用希伯来语(或你不懂的某种语言)数到10,你只是说你不知道。不管怎样,你都不要去尝试。

        4
  •  2
  •   Jon Skeet    17 年前

    调试器中的异常与发布中的异常不同(除非有except/finally块,否则异常确实会导致执行退出该proc/函数)。为什么调试应该让你完全忽略异常?

        5
  •  0
  •   Loren Pechtel    17 年前

    它必须解开堆栈才能找到处理程序。

    我确实同意这是一种非常烦人的行为。继续不是一种选择,但如果调试器指向抛出它的位置,并且局部变量保持不变,那么它肯定会让事情变得更容易。显然,下一步将是最终隐藏,而不是下一行。

    知道 有问题的字符串不包含非数字字符(健全性限制意味着溢出情况永远不会发生,这是我的数据文件,我担心的只是糟糕),所以我没有在StrToInt周围放置异常处理程序——它不是一个有效的数字,这有什么意义?????是的——例程不会用缓冲区中的任何非数字来调用它——但空字符串中没有任何非数字!

    推荐文章