Java事后调试?

Java事后调试?,java,debugging,exception,Java,Debugging,Exception,是否可以在Java中进行事后(或事后异常)调试会话?解决方法是什么(如果还没有解决方案的话)?您可以将调试器附加到java进程,并在出现特定问题时设置断点 收到异常。这是你需要的吗 从 当发生以下情况的异常时: 到处都没有catch语句 在Java程序的堆栈中,Java 运行时通常转储异常 跟踪和退出。在水下运行时 然而,jdb是一个例外 被视为不可恢复资产 断点,jdb在 令人不快的指示。如果那门课 是用-g选项编译的, 实例和局部变量可以是 打印以确定故障原因 例外 这种类型的断点可以在任

是否可以在Java中进行事后(或事后异常)调试会话?解决方法是什么(如果还没有解决方案的话)?

您可以将调试器附加到java进程,并在出现特定问题时设置断点 收到异常。这是你需要的吗

当发生以下情况的异常时: 到处都没有catch语句 在Java程序的堆栈中,Java 运行时通常转储异常 跟踪和退出。在水下运行时 然而,jdb是一个例外 被视为不可恢复资产 断点,jdb在 令人不快的指示。如果那门课 是用-g选项编译的, 实例和局部变量可以是 打印以确定故障原因 例外

这种类型的断点可以在任何IDE中设置,例如Eclipse。使用eclipse,您还可以在特定的异常类型上设置断点,即使它是在普通代码中捕获的

如果您运行了类似多线程的服务器,并且为客户机提供服务的某个线程抛出了未处理的异常,那么您就可以检查调试器并查看发生了什么。我不认为这是生产上的事情,但在测试时确实有帮助

应用程序不必从调试器运行,但可以使用调试选项作为参数启动:

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=XXXX
应用程序正常运行,但在遇到断点时会切换到“解释”模式,至少在更现代的JVM版本中是这样。因此,性能不会受到影响

检查有关的部分

全速调试

Java热点VM现在使用 全速调试。以前 调试完成时VM的版本 启用时,使用 只有翻译。现在,全部 热点的性能优势 技术可用于程序, 即使是编译代码。改进的 性能允许长时间运行 使程序更容易调试。 它还允许在以下时间进行测试: 全速。一旦出现 异常情况下,调试器将以 对代码源的完全可见性


据我所知,您必须等待Java7才能获得官方API—请参阅


同时,您可以替换Exception(替换基类、通过插装插入代码等)来保留数据。请注意,尽管ClassLoader定期抛出并捕获ClassNotFoundException(每个新加载的包)。通过这种方式,您可以在不修改基本代码的情况下进行大量控制。

我是Replay解决方案的解决方案架构师。它们为java应用程序提供了一个“时间机器”。您可以在应用程序运行时录制它(比如说,在QA环境中),然后在您的开发机器上重播录制。您不需要访问数据库、配置等。您所需要的只是他们的ReplayDIRECTOR解决方案,您可以在IDE的友好范围内调试问题。可以重播的问题包括配置问题、数据库异常和线程问题。看一看:


问题是,我的应用程序将运行一段不确定的时间,如果它抛出异常,我希望进行调试。问题是,如果我在调试器中运行应用程序,性能会下降。我已经扩展了有关全速调试的信息。您好,Mario,您似乎有将jdb连接到正在运行的进程的经验。您能在这里回答我的问题吗…虽然有许多共同的词语,但JSR 326没有(AFAIK)回答被问到的问题。相反,它为读取Java程序生成的工件(堆转储、堆栈跟踪等)建立了标准格式和工具。我看不出这会如何让你真正调试验尸报告。@alex我一定认为“调试验尸报告”意味着在jvm死前立即检查堆/获得准确的堆栈跟踪。你说得对——它并没有真正回答这个问题。它可能意味着就像在Python中一样,在任何异常之后都可以简单地调用。对调试非常有用。那个链接把我带到一个诈骗网站。