我们经常碰到线程突然死掉,但是又找不到原因,总不能在每个线程的run方法中都加上Try Catch吧, 况且对第三方框架内启的线程你想加Try catch还加不了呢? 怎么办?
现在有一个现成的办法,就是给每个线程"加个"默认的Try Catch, 任意一个线程出现没有捕获住的异常都执行我们自定义的那段代码。Thread中提供一个 setDefaultUncaughtExceptionHandler 的静态方法,给我们提供了这种可能。
代码贴出来如下:
class ExceptionHandler implements UncaughtExceptionHandler{
private final Logger logger = Logger.getLogger("Exception");
ExceptionHandler(){
FileHandler myFileHandler;
try {
myFileHandler = new FileHandler ("D:\\Logger.log");
SimpleFormatter formatter = new SimpleFormatter();
logger.addHandler(myFileHandler);
myFileHandler.setFormatter(formatter);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void uncaughtException(Thread t, Throwable e) {
logger.log(Level.ALL, "UncaughtException Thread ");
}
}
UncaughtExceptionHandler handle=new ExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(handle);
在程序启动的时候加入这一段。这样任何线程中,只有有没有被捕获的异常,都会执行我自定义的Handle的uncaughtException方法,把这个异常打印出来。
分享到:
相关推荐
标题 "debug程序,应用程序发生异常" 提到的问题主要涉及到软件开发中的调试环节,特别是当一个应用程序在执行过程中遇到异常情况,比如除零错误。在编程中,异常是程序执行时遇到的非正常情况,通常会导致程序崩溃...
- **多线程处理**:jNetPcap支持多线程捕获,可以在多个线程间分配数据包处理任务,提高处理效率。 - **事件驱动编程**:利用回调函数,可以在数据包到达时立即触发处理,避免了轮询检查的开销。 - **统计与...
5. 多重catch:Java 7后允许在一个catch块中捕获多种类型的异常,简化代码。 6. 异常链:记录异常发生过程,方便追踪问题源头。 以上就是基于“java复习提纲”的主要知识点,深入理解和熟练掌握这些内容,对于提升...
结果分析:只要异常没有被完全捕获,异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main 方法,如果 main 方法依然没有处理该异常,JVM 会中止该程序,...
3. **异常处理** - 可以捕获并处理异步操作中的异常,提供更健壮的错误处理机制。 4. **链式调用** - 利用RxJava的操作符,可以方便地进行任务的串联和并行,提高代码可读性。 5. **取消任务** - 提供了取消任务的...
2. **异常分类**:一旦捕获到异常,该组件可能会对它们进行分类,根据异常类型、严重性或业务上下文进行区分。这有助于决定后续的响应策略。 3. **自定义响应生成**:此组件的核心功能在于生成自定义响应。这可能...
- **异常链**:当一个异常处理过程中抛出了另一个异常,原来的异常信息会被保存在新异常的`cause`属性中,形成异常链,方便追踪问题源头。 - **自定义异常**:可以通过继承`Exception`或其子类创建自定义异常,...
1. **软件开发**:在开发过程中,DebugView可以帮助开发者查看程序内部的调试输出,追踪异常或错误的源头。 2. **系统调试**:对于系统级的问题,如驱动程序的调试,DebugView可以捕获内核模式下的调试信息,提供...
7. **多线程支持**:madExcept能够处理多线程应用中的异常,确保每个线程的异常都能被正确捕获。 **源码学习价值** 拥有madExcept 5的源码意味着你可以深入理解其工作原理,学习如何编写更健壮的异常处理代码。这有...
上述代码会在捕获异常时打印出导致异常的完整调用堆栈。 7. **性能考虑**:`StackTrace`类的使用可能会对性能产生一定影响,特别是在高并发或性能敏感的场景下。因此,应谨慎在生产环境中使用,通常只在调试或异常...
对于复杂的调试场景,如崩溃或未捕获的异常,利用“调试器事件”设置在特定事件(如异常)发生时中断,这样可以更好地分析出错时的上下文。 最后,了解并运用调试器的高级特性,如数据筛选、条件断点、命令行调试、...
这个报告不仅包含异常类型、堆栈跟踪,还可能包括内存快照、线程信息、系统配置等,这对于定位问题的源头非常有帮助。开发者可以通过这些信息快速定位到代码中的错误位置,从而缩短了故障排查时间。 EurekaLog 7.7....
使用try-except语句来捕获和处理异常,确保程序在遇到错误时能够优雅地退出,而不是突然崩溃。同时,结合logging模块记录异常信息,可以有效地定位和解决程序运行时的问题。 总的来说,Python开发者需要了解并掌握...
- **异常类型与捕获**:理解C++标准异常和结构化异常的区别,以及如何有效地捕获和处理异常。 - **异常安全编程**:了解基本、强烈和无处不在的异常安全性,以确保在异常发生时资源得到正确释放。 6. **性能优化*...
- **流的概念**:流是一种从源头到目的地的数据传输通道。 - **输入流与输出流**:根据数据流动方向的不同,可以分为输入流和输出流。 - **文件流与缓冲流**:FileInputStream/FileOutputStream用于读写文件,...
在数据库自检中,可能需要将结果导出为报告文件,或者从文件中读取初始数据。 9. 并行处理:如果数据库规模庞大,Python的multiprocessing或concurrent.futures库可以用来实现多线程或多进程并行处理,加快数据检查...
它允许用户在任意时间点捕获当前系统中所有运行进程的状态信息,包括但不限于进程ID、优先级、内存使用情况、CPU占用率等。这种快照功能对于诊断性能问题、跟踪恶意软件活动或分析系统行为变化时非常有用。通过保存...
11. **异常链**:允许一个异常对象包含另一个异常作为其原因,这样可以在捕获和处理异常时更好地追踪问题的源头。 12. **并发工具类**:Java并发包(java.util.concurrent)在JDK6中得到了丰富,提供了并发容器如...
这些工具可以帮助识别内存中的对象实例、内存泄漏源头、大对象的统计信息等。 ### 6. 关于Javadump的常见问题 Javadump是Java虚拟机中提供的用于获取Java进程调试信息的一个工具。它和Threaddump以及Heapdump共同...
操作系统会在这些异常发生时生成一个异常记录,包含异常类型、线程信息和调用堆栈等。CrashFinder可能利用这些信息来追踪崩溃的源代码行。 2. **调试信息**:为了准确地定位到源代码,CrashFinder可能需要程序的...