是否可以在没有断点的情况下调试正在运行的 java 进程(使用 Eclipse / IntelliJ)?当具有这样的构造时,对于获取对象的状态很有用:
double d = Math.random();
BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
queue.take();
“take()”将永远阻塞,我想在调用 take() 后使用调试器获取 d 的值。
I'd like to get the value of d with the debugger after take() was called
一个简单的解决方案是打印该值。那么你就根本不需要调试器了。当由于测试某些内容、在运行时检查某些对象等而更改数据时,调试器非常有用。
queue.take();
System.out.println(d);
在你的情况下,这不是选择。您可以选择的一种选择是反编译包含
BlockingQueue
类的 jar,将它们转换为源文件,将其包含在您的项目中,并在 take()
内设置断点以查看行为。
一个最好的反编译器是:
使用此功能,您可以查看
take()
函数的源代码,并复制整个类并将其粘贴到名称为 BlockingQueue.java
的包中,然后根据需要粘贴整个源代码并进行调试。
在发生错误后查看线程的状态将非常有用;虽然它在某些解释性语言中更为常见,但遗憾的是在 Java 中却缺乏。然而,我想到了四种方法,但请记住,Java 中的标准方法是记录重要状态以供以后诊断。
刚刚注意到 Eclipse 和 IntelliJ 中有一个暂停/挂起按钮。这就是工作。