处理静默终止线程的意外异常
Handle unexpected exceptions that silently kill a thread
我有一个线程有时会静静地死掉,我想用一个 try/catch 块包围这个操作,以便在不杀死线程的情况下找出发生了什么。
我最初用 try / catch (Exception e) 块包围了 运行 中的操作,但担心的是这可能会忽略由 运行() 的依赖项抛出的已检查异常并且没有得到妥善处理。另一方面,我也担心(未经检查的)错误被吞没。
有人建议,作为短期防御,我应该将当前的 运行() 方法重命名为 运行Internal() 之类的名称,不声明已检查的异常,并将 catch/log 可在 运行() 中围绕对 运行Internal() 的调用抛出。
我不明白这有什么帮助。
I want to surround the operation with a try/catch block to find out
what is going on without killing the thread.
快速回答:您无法保存话题。一旦抛出异常,你作为局外人所能得到的最多就是堆栈跟踪。
使用 runInternal 技术进行包装将帮助您记录错误的堆栈跟踪,而不是让线程默默地死掉。
但是,您在这里真正想做的是附加一个调试器,如 eclipse,并将其设置为在捕获和未捕获异常时暂停,直到找到您要查找的异常。这将在故障点暂停线程,但不会终止它。
Break when exception is thrown
我有一个线程有时会静静地死掉,我想用一个 try/catch 块包围这个操作,以便在不杀死线程的情况下找出发生了什么。
我最初用 try / catch (Exception e) 块包围了 运行 中的操作,但担心的是这可能会忽略由 运行() 的依赖项抛出的已检查异常并且没有得到妥善处理。另一方面,我也担心(未经检查的)错误被吞没。
有人建议,作为短期防御,我应该将当前的 运行() 方法重命名为 运行Internal() 之类的名称,不声明已检查的异常,并将 catch/log 可在 运行() 中围绕对 运行Internal() 的调用抛出。
我不明白这有什么帮助。
I want to surround the operation with a try/catch block to find out what is going on without killing the thread.
快速回答:您无法保存话题。一旦抛出异常,你作为局外人所能得到的最多就是堆栈跟踪。
使用 runInternal 技术进行包装将帮助您记录错误的堆栈跟踪,而不是让线程默默地死掉。
但是,您在这里真正想做的是附加一个调试器,如 eclipse,并将其设置为在捕获和未捕获异常时暂停,直到找到您要查找的异常。这将在故障点暂停线程,但不会终止它。
Break when exception is thrown