您使用哪个Java调试器

我花了很多时间使用JPDA在Eclipse中调试应用程序。 Eclipse调试器有一些问题让我非常恼火。任何人都可以推荐插件,更好的调试器或者我不知道的技巧吗? 在“变量”(Variables)选项卡中,您可以键入并执行Java代码位。但是,您首先需要点击某些内容(我通常会点击“this”)给它一些上下文。然后,在输入冗长的Java表达式来调试某些内容并“执行”它之后,您的表达式将被替换为结果,因此您需要重新键入它。有没有更好的方法,比如控制台或我缺少的东西? 当你在浏览数据结构时,调试器中的表示还有很多不足之处。你会看到Lists,Maps,StringBuilders等的内部表示。我想看到的是这些对象在概念上包含的内容。有没有办法做到这一点,可能使用其他调试器,或扩展或什么? 抛出异常时,是否有某种方法可以检查抛出异常的应用程序的状态?目前我需要在Exception发生之前设置断点,然后尝试重现它。 当我踩到一条带有许多语句的行时,我实际上无法看到哪些语句正在被执行,除非“踩到”每个语句以查看它在哪里。 如果没有找到源代码,Eclipse只会茫然地盯着你看。你得到一个有用的屏幕,说“找不到类文件编辑器/源代码”这是完全没用的。我更喜欢能够逐步执行字节码,所以我至少可以看到发生了什么。有没有人知道Java调试器比Eclipse更好?     
已邀请:
我一直在使用Eclipse调试器一段时间并分享您的一些顾虑。但是,您提到的一些要点已在Eclipse调试器中解决/解决: 数据结构:变量视图已经具有显示列表/集/数组等的“逻辑结构”的选项。此视图的左上角有一个按钮来启用此功能。您还可以通过Java-> Debug-> Logical Structures首选项添加自己的自定义表示。 例外:调试器允许您设置异常断点(在断点视图中添加Java异常断点按钮)。抛出特定异常时会触发这些断点。 源代码:如果您安装了一个包含字节码查看器的插件(例如asm字节代码插件http://asm.ow2.org/eclipse/index.html),调试器将在缺少源代码时逐步执行字节码。     
我同意Vilas Jagannath所说的很多内容。 使用Eclipse调试器 附加要点: 1)显示视图。此视图允许您在当前堆栈帧的上下文中运行代码。这允许您检查任意位代码。在某些方面它有点原始,但它作为便笺本很好。 4)如果要在具有复杂表达式的行中调用某个方法,可以导航到该函数,然后“Run to Line”(Ctrl + R) 5)您还可以使用步骤过滤器来过滤您不关心的类。右键单击您不关心的堆栈框架,然后点击“过滤器类型”。确保您有“使用步骤过滤器”。它是Debug视图上“drop to frame”按钮右侧两个箭头的图标。     
我使用NetBeans及其调试器。 关于你的第三点(例外):我认为没有任何其他方法可以在抛出异常时查看状态。当抛出该方法的异常时,该方法的堆栈帧已被丢弃 - 它丢失了,因此您无法再检查它。 据我所知,NetBeans调试器也不允许您逐步执行字节码。     
通常,我会说eclipse有一个比我首选的IDE更好的调试器,IntelliJ(免费版)对于前四个,IntelliJ可能更好用异常断点(允许你在抛出异常时看到状态) ,对象类型的自定义渲染器和持久表达式(即每次更改上下文时都会重新评估表达式) 我不知道任何调试器会逐步执行字节代码。     
这是我的答案 - 子弹与你的问题子弹的顺序相同: 有一种更好的方法: 使用“显示”视图执行语句。 在类本身上写一些东西并“检查”它(ctrl + shift + I) 请参阅变量视图中显示“显示逻辑结构”的小图标。它可能就是你要找的东西。 您可以在Exception上设置一个通用断点,以便在发生异常时捕获异常 - 在异常视图中,J!图标。 我用ctrl + alt +鼠标左键单击我要介入的方法,就像一个魅力! 您仍然可以使用键或按钮(参见堆栈)。如果要查看代码,请使用反编译器。 我相信他们仍有改进的地方,但这些提示可能对你有所帮助。     
  当我踩到一条线时   关于它的许多陈述,我不能   实际上看看哪些陈述   正在执行,除了“踩踏”   在“每个人看到它需要的地方   我。 选择要插入的功能,并使用“Step Into Selection”(我在Ctrl-F5上有它,但您可以在上下文菜单中找到它)。     
作为替代方案,您可以使用log.debug和System.out.println来丢弃代码,这意味着您可以随心所欲地执行任何操作!     
对于与gui调试器不同的东西,我有一个名为jdiscript的项目,它允许您编写JVM的Java调试器接口的脚本。我发现它对于解决线程争用和查找在生产负载下偶尔会出现的问题特别有用。     

要回复问题请先登录注册