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