【问题标题】:instance variable is becoming null实例变量正在变为空
【发布时间】:2025-12-24 10:40:11
【问题描述】:

我正在开发基于 SWT 的 GUI 应用程序。我有一个私有的对象变量。 此变量在应用程序运行时的某个时间变为空。我想知道如何设置看门狗类型的调试,以便我知道哪个线程使其为空。

【问题讨论】:

标签: java debugging


【解决方案1】:

最简单且独立于 IDE 的方法是将变量封装在 setter / getter 对后面,并在代码中添加一条语句以监视设置值 null

曾经:

public MyObject obj;

改为:

private MyObject obj;
public MyObject getObj() {
    return obj;
}
public void setObj(MyObject val) {
    if (val == null) {
        // Add a log debug statement, and set a breakpoint here
    }
    obj = val;
}

封装变量通常是一件好事,通常证明在调试环境之外也很有用。

【讨论】:

    【解决方案2】:

    1.我认为您在谈论某种类型的对象的Object Reference Variable

    在它的 setter 方法中检查值。

    例如:

    CustomObject cObject;
    
    public void setObject(CustomObject o){
    
    
           if(o.equals(null)){
    
    
                  // Save it in log, Sysout it... etc.
           }
            else{
    
                  cObject = o;
    
             }
    
     }
    

    【讨论】:

      【解决方案3】:

      我想你正在使用 Eclipse 来调试你的应用程序。

      对于 Eclipse,您可以设置断点进行访问和修改,这里是快速步骤:

      1. 关注私有变量的行。选择运行菜单 -> 切换中断 观点。 (如果您使用的是默认键映射,则可以按 Ctrl+Shift+B)
      2. Show Breakpoints View by Window menu -> Show View -> Other... Breakpoints
      3. 单击您切换的变量,右键单击并取消选中访问选项。只保留修改。
      4. 在调试模式下运行应用程序。

      你应该可以看到变量的修改。

      【讨论】: