Tag: 调试

如何获得正在运行的100%cpu的java程序的完整堆栈跟踪?

我确实有一个jenkins实例,它被卡在某种无限循环中,没有任何可见的活动。 我可以获得正在运行的进程的pid ,那么如何生成可用于错误报告的跟踪? 我在linux上运行。

您在哪里配置Eclipse Java编译器(javac)标志?

防爆。 javac -g ButtMonkey.java Eclipse编译Java源代码时,在哪里配置-g标志? (使用Ganymede,但我怀疑在以后的版本中有所改变,所以任何答案都可能有所帮助。) 我需要的是: -G 生成所有调试信息,包括局部变量。 默认情况下,仅生成行号和源文件信息。

为什么Eclipse调试器似乎没有理由给出错误的“Source not found”?

当我在Eclipse中调试时,经常发生调试器崩溃,显示错误消息“Source not found”(其下是一个带有“Edit Source Lookup Path”文本的按钮)。 我之前在网上搜索过这个问题的解释/解决方案,但对我没有任何帮助。 但是,我现在已经弄清楚在我的情况下发生了什么:当逐行单步执行代码,然后逐步退出运行代码块时,会发生错误。 我不知道术语,但我猜许多应用程序可能会在某些时候进入“待机模式”,其中当前没有任何代码正在运行。 一个示例是等待鼠标单击的图形应用程序。 在MouseListener方法中停止断点,然后退出它(进入“待机模式”)将导致我的错误。 我在这个问题的底部提供了一个MWE。 当我在该行放置断点时发生错误 System.out.println(“You clicked!”); 并使用F6逐步退出方法(“Step Over”)。 如果我在侦听器的最后一行按F8(“Resume”)而不是F6,调试器不会崩溃,一切都很好。 我的问题是:为什么Eclipse在这种情况下会做一些如此严重的崩溃? 据我所知,源代码中没有一行可以说程序控件在下面的示例中离开监听器后可以说“步入”,但为什么不进入“待机模式”而不抱怨? 我可以以某种方式停用此错误,以防止我的调试会话经常遇到不合时宜的结束吗? 或者我只需要记住按F8而不是F6,后者会导致崩溃? package app; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; public class TestFrame extends JFrame { public TestFrame() { getContentPane().setPreferredSize(new Dimension(200, 200)); getContentPane().addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.out.println(“You clicked!”); […]

以编程方式进行线程转储/ JDI(Java调试器接口)

我喜欢以编程方式生成线程转储。 我已经了解到基本上有两种方法可以做到: 使用“Java虚拟机工具接口”JVM-TI 使用更高抽象的“Java调试器接口”JDI 对于JVM-TI,我能够找到一些有用的信息,但我必须编写一个JNI-DLL,至少在目前,我想避免使用它。 使用JDI,我可以使用Java,似乎我可以在应用程序中使用它。 但我无法找到某种教程或HOWTO。 我能找到的唯一文件是Java-Docs http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ ,这对我没有帮助,因为它没有给我看如何使用这个类。 那么,有没有人知道我能阅读的好教程/书? 感谢任何帮助!

Eclipse在单独的窗口中打开控制台应用

有没有办法在新窗口中配置eclipse打开控制台应用程序而不是在运行/调试它们时自己的控制台? 我正在调试客户端/服务器应用程序,我希望一次看到两个应用程序的输出,而不必在选项卡之间切换…

Java标志以启用扩展的序列化调试信息

我目前正在使用复杂对象在tomcat上进行HTTP会话复制。 某些对象实现Serializable但保留不可序列化的成员。 不幸的是,默认情况下,堆栈跟踪在这里没有提供太多有用的信息。 有一个标志-XX:???? 发生NotSerializableException时在stacktrace中启用详细类名 。 这个标志会帮助我找到错误的来源。 但我忘记了它的名字 国旗的名称是什么?

文件系统上的哪个地方是我的Java类加载的?

我认为这是每个Java程序员遇到的情况,如果他们做得足够长的话。 您正在进行一些调试并对课程进行更改。 当你重新运行程序时,这些更改似乎没有被提取,而是旧的类似乎仍在运行。 你清理和重建一切,同样的问题。 有时,这可以归结为类路径问题,同一个类在类路径上不止一次,但似乎没有一种简单的方法来确定加载的类来自哪里…… 有没有办法找到加载的类的文件路径? 如果从.class文件或.jar文件加载类,则.jar 。 有任何想法吗?

如何在getter链中跟踪NullPointerException

如果我在这样的调用中得到NullPointerException: someObject.getSomething().getSomethingElse(). getAnotherThing().getYetAnotherObject().getValue(); 我得到一个相当无用的exception文本,如: Exception in thread “main” java.lang.NullPointerException at package.SomeClass.someMethod(SomeClass.java:12) 我发现很难找到实际上调用returend null,经常发现自己将代码重构为这样的东西: Foo ret1 = someObject.getSomething(); Bar ret2 = ret1.getSomethingElse(); Baz ret3 = ret2.getAnotherThing(); Bam ret4 = ret3.getYetAnotherOject(); int ret5 = ret4.getValue(); 然后等待更具描述性的NullPointerException,告诉我要查找哪一行。 你们中的一些人可能会认为,连接getter是一种糟糕的风格,无论如何都应该避免,但我的问题是:我可以在不更改代码的情况下找到错误吗? 提示:我正在使用eclipse,我知道调试器是什么,但我不知道如何将它应用于问题。 我对答案的结论是: 一些答案告诉我,我不应该一个接一个地连接吸气剂,一些答案显示我如何调试我的代码,如果我不赞成这个建议。 我已经接受了一个答案,它教会了我什么时候连锁吸气剂: 如果他们不能返回null,只要你喜欢就链接它们。 无需检查!= null,无需担心NullPointerExceptions(请注意链接仍然是demeter的法则,但我可以忍受 ) 如果它们可能返回null,则不要永远不会链接它们,并对每个可能返回null的值执行空值检查 这使得对实际调试的任何好建议毫无用处。

如何使用Eclipse调试JNI代码(Java和C / C ++)

虽然我可以使用用于Java代码的Eclipse JDT调试器和用于C代码的GDB调试我的应用程序,但我更倾向于使用单个工具进行所有调试。 我找到了几个在Eclipse中启用“混合模式”调试的项目,并支持Java和本机代码之间的单步执行。 英特尔针对Java / JNI环境的集成调试器 Mariot Chauvin的代码之夏项目:支持JDT和CDT之间的无缝调试 不幸的是,一个声称是预发布质量,另一个目前没有维护。 是否有任何插件能够以可靠的方式为Eclipse带来混合模式调试function,还是应该继续使用两个单独的调试器?

Eclipse中exception的断点 – 如何检查Exception对象?

我觉得我在这里错过了很简单的东西。 我设置了Eclipse来打破所有exception。 所以,假设它在AssertationFailedException上中断。 Debug窗口将显示该线程已挂起并具有以下数据: Thread [Thread-1](Suspended(exceptionAssertionFailedException))ContactManager.addContact(String)行:93 ContactManager $ ContactDataCallback.dispatch(String,Element,ClientConnector)行:118 PacketHandler.handle(FractusPacket)行:173 ServerConnection.syncProcess( FractusMessage)行:122 ServerConnection.run()行:248 Thread.run()行:636 但是,我正在寻找的文本,例如:“Getter在可观察的org.eclipse.core.databinding.observable.set.WritableSet@4b7361e2外部调用”,直到我逐步执行exception(因此传播)才可用它一直向上堆栈)它输出exception的类型,文本(这是我想要的部分)和堆栈跟踪。 如何检查“AssertationFailedException”(或任何其他exception)以获取构造exception的消息? 当然我在Debug透视图中。