java - 在 Exception 上转储变量状态

标签 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);
    }

}

输出:

james is employee number: 1
Exception in thread "main" java.lang.NullPointerException

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

java.lang.NullPointerException

和(这是我想要的部分)

values: employeeId=2

我希望能够在客户端站点上执行此操作,因此无法访问 Eclipse 或调试工具,只能查找 JVM 参数,也无法更改代码。我已经浏览过它们,但找不到任何东西。与此同时,我也会继续在那里搜索 ;)

最佳答案

我遇到了一个商业产品,它通过简单地使用 startup -agentlib JVM 代理参数来做到这一点。我还没有使用过它,但打算尝试一下,因为它看起来很有前途。

https://www.takipi.com/product

有人使用过该产品吗?

关于java - 在 Exception 上转储变量状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8944362/

相关文章:

Javafx 将 SetProperty 绑定(bind)到从可观察对象生成集合的回调

java - Android 应用程序无法通过移动数据连接到服务器

windows - 尝试使用 WinDbg : PEB is Paged Out, 分析转储文件不会加载符号

r - 如何识别循环中操作的警告生成实例?

java - 最佳实践——异常处理

java - 如何在 block 内初始化变量?

具有长类名和字段名的 Java 默认序列化

eclipse - 无法连接到远程 VM。拒绝连接。同时尝试调试 jar

security - Visual Studio 2013 浏览器链接无法在 Firefox 中正常运行 - 引发异常

java - 使用 Tomcat 9 时出现 Jasper 异常