在Exception上转储变量的状态

use*_*931 13 java debugging exception

我想知道是否有一种方法可以在出现异常时转储所有局部变量的状态,以便更好地了解导致异常的环境状态.变量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);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

james is employee number: 1
Exception in thread "main" java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

问题:我是否可以传递一些JVM参数来转储有关局部变量当前状态的信息?即我们得到

java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

(这是我追求的部分)

values: employeeId=2
Run Code Online (Sandbox Code Playgroud)

我希望能够在客户端站点上执行此操作,因此无法访问Eclipse或调试工具,只查找JVM参数,也无法进行代码更改.我看过他们但却找不到任何东西.在此期间我也会一直在那里搜索;)

Per*_*ion 2

考虑到您的所有限制,除了 jdb 之外我无法推荐其他任何东西。解雇那个坏男孩并开始逐行单步执行客户端代码。我知道您说过没有调试工具,但除非它们是仅 JRE 的环境,否则您应该已经安装了 jdb。