我想知道有没有办法在出现异常时转储所有局部变量的状态,以便更好地了解导致异常的环境状态.下面的变量idsToDump在运行时是未知的,我想找出收集中的哪个值导致NPE的状态.
例:
public static void main(String[] args) { HashMap<Integer,String> employees = new HashMap<Integer,String>(); employees.put(1,"James"); Integer[] idsToDump = new Integer[] { 1,2,3 }; for (Integer employeeId : idsToDump) { String name = employees.get(employeeId).toLowerCase(); System.out.println(name + " is employee number: " + employeeId); } }
输出:
james is employee number: 1 Exception in thread "main" java.lang.NullPointerException
题:
有没有一些JVM参数,我可以传递转储关于局部变量的当前状态的信息?即我们得到
java.lang.NullPointerException
和(这是我之后的部分)
values: employeeId=2
我想能够在客户端站点上执行此操作,因此无法访问Eclipse或调试工具,只寻找JVM参数,也无法使代码更改.我看过他们,但找不到任何东西.在此期间,我也会继续搜索;)
解决方法
鉴于您的所有限制,除了jdb之外,我不能推荐任何其他操作.开火那个坏男孩,开始逐行通过客户端代码.我知道你说没有调试工具,但是除非它们是JRE的环境,否则应该已经安装了jdb.