MST

星途 面试题库

面试题:Java异常处理调试之常见异常排查

在Java程序中,当抛出 `NullPointerException` 时,如何通过调试技巧快速定位到引发该异常的代码行?请描述至少两种常用的调试手段。
46.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 使用IDE调试

  • 断点调试:在IDE(如IntelliJ IDEA、Eclipse等)中,在可能出现空指针异常的代码附近设置断点。当程序运行到断点处会暂停,此时可以查看变量的值。例如,如果怀疑某个对象可能为null,可以在使用该对象的方法或属性前设置断点,通过调试窗口查看对象是否确实为null
  • 异常断点:许多IDE支持设置异常断点,在IDE中找到设置异常断点的选项(如IntelliJ IDEA中可在 Run -> View Breakpoints 中设置 Java Exception Breakpoints),勾选 NullPointerException。当程序抛出该异常时,会自动停在抛出异常的代码行,直接定位问题代码。

2. 日志输出调试

  • 添加日志语句:在代码中关键位置添加日志输出语句,例如使用 System.out.println() 或者日志框架(如Log4j、SLF4J等)。在可能出现空指针异常的对象操作前后输出对象的值。比如:
Object obj = someMethodThatMightReturnNull();
if (obj == null) {
    System.out.println("obj is null at line X");
} else {
    obj.someMethod();
}
  • 详细日志级别:如果使用日志框架,可以将日志级别设置为更详细(如DEBUG级别),以便输出更多信息帮助定位。这样在程序运行时,通过查看日志文件就能发现对象何时为null,进而定位到问题代码行。

3. 代码审查

  • 静态分析:仔细审查代码逻辑,从代码结构和业务逻辑角度分析可能出现空指针的地方。例如,检查方法返回值是否可能为null,却没有进行空值检查就直接使用;或者检查对象在初始化过程中是否存在未正确赋值的情况。
  • 调用链分析:梳理代码的调用链,从抛出异常的位置逆向追踪,分析每个方法的输入和输出,看是否在某个环节传入了null值,或者在处理过程中导致对象变为null