【问题标题】:Is it possible to create a Java dump when a special Exception happens?发生特殊异常时是否可以创建 Java 转储?
【发布时间】:2017-01-10 12:23:31
【问题描述】:

发生特殊异常时是否可以创建 Java 转储?因为我需要在异常发生时检查转储内存,例如当发生空指针异常时,它可以自动生成转储。我们知道.net平台有这样一个工具procdumphttps://technet.microsoft.com/en-us/sysinternals/dd996900.aspx,不知道Java有没有类似的方法?

【问题讨论】:

  • 抛出此异常时,我会使用调试器和断点。
  • @user1097772 ,这只是处理OOM异常,但是我们需要捕获任何类型的异常。
  • @Peter ,您使用了哪个调试器,有什么详细信息吗?它也可以处理任何异常?
  • 在您的调试器中,您可以添加一个断点以在发生任何特定异常时触发。此时,您可以看到您的程序及其所有线程正在做什么以及查看应用程序中的所有数据。

标签: java


【解决方案1】:

您可以处理所需的异常并将下面的代码放入 catch 中以随时捕获堆转储

ObjectName memoryMXBean = new ObjectName("com.sun.management:type=HotSpotDiagnostic");
Object[] params = new Object[] { "myHeapDump.hprof", Boolean.TRUE };
String[] signature = new String[] { String.class.getName(), boolean.class.getName() };
Object result = connection.invoke(memoryMXBean, "dumpHeap", params, signature);

【讨论】:

  • 它需要在可能发生异常的所有地方编写代码,并且还需要更改代码,但是我需要在不重写procdump之类的代码的情况下获取转储。
  • @Hermas 你可以去stackoverflow.com/a/23640439/4090550我没时间测试,但你可以试试
猜你喜欢
  • 1970-01-01
  • 2013-11-11
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2012-03-11
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多