Java 如何在第三方库中的Eclipse中设置断点?
我从第三方库得到一个类中的NullPointerException。现在我想调试整个过程,我需要知道类是从哪个对象持有的。但在我看来,我无法在来自第三方的类中设置断点 有人知道我摆脱困境的方法吗?当然,我使用Eclipse作为我的IDEJava 如何在第三方库中的Eclipse中设置断点?,java,eclipse,debugging,breakpoints,Java,Eclipse,Debugging,Breakpoints,我从第三方库得到一个类中的NullPointerException。现在我想调试整个过程,我需要知道类是从哪个对象持有的。但在我看来,我无法在来自第三方的类中设置断点 有人知道我摆脱困境的方法吗?当然,我使用Eclipse作为我的IDE 更新:该库是开源的。您可以轻松地在第三方库中设置方法断点,而无需源代码。只需打开类(您将获得“我没有源代码”视图)。打开大纲,右键单击所需的方法,然后单击切换方法断点以创建方法断点。通常,您应该能够设置断点。特别是如果第三方库是开源的。但是,如果您的第三方库来自
更新:该库是开源的。您可以轻松地在第三方库中设置方法断点,而无需源代码。只需打开类(您将获得“我没有源代码”视图)。打开大纲,右键单击所需的方法,然后单击
切换方法断点
以创建方法断点。通常,您应该能够设置断点。特别是如果第三方库是开源的。但是,如果您的第三方库来自商业供应商,他们可能在编译源代码时关闭了调试标志。这将使您无法调试到其中。您的供应商可能已将此作为模糊处理过程的一部分,以使库无法反向工程,或者仅仅因为最终编译的类将更小。您还可以在特定异常上设置断点。从调试的角度来看,有一个按钮“AddJavaExceptionBreakpoint”,您可以在这里添加“NullPointerException”。一旦出现此类异常,调试器将立即暂停执行。最可靠的方法是下载源代码(您说它是开源的),然后设置另一个指向该源代码的“Java项目”
要做到这一点,请下载源代码并将其解压缩到系统中的某个位置。单击“文件”->“新建”->“Java项目”。在下一个对话框中,给它一个项目名称并选择“从现有源创建项目”。浏览到开源库的根位置
假设您下载的项目中包含了项目所需的所有附加库,Eclipse将为您解决所有问题并设置构建路径
您需要从项目的构建路径中删除开源jar,并将这个新项目添加到项目的构建路径中
现在,您可以将其视为您的代码,并随意进行调试
这至少解决了其他方法的几个问题:
行、源、变量
…请参阅,以及-g
选项)只需附加源代码(或使用自动附加源jar的东西),然后以正常方式设置断点,双击感兴趣行的左侧。要使用maven物化web应用程序实现这一点,我必须做三件事 1) 使用第三方jar的源代码创建一个新的eclipse项目 2) 从pom.xml依赖项中删除对jar的引用 3) 将新的eclipse项目添加到项目属性中的部署程序集中 4) 将新的eclipse项目添加到引用第三方项目的现有项目的项目属性->Java构建路径->项目中
如果第三个项目已正确添加到您的maven存储库中,maven将自动下载适当的源代码,并允许您添加断点,而无需执行上述任何步骤;然而,我明白了,你不能总是指望这一点 我将询问同事调试标志是否已关闭。这不会捕获库中抛出的异常。也许Bent在未设置调试标志的情况下说了些什么。我从未见过这种情况发生。JVM仍然有堆栈跟踪,只是没有源代码或行号,所以它应该仍然会在异常时中断。我用它在Eclipse调试中捕获servlet异常,而我似乎无法在应用程序代码本身中捕获到这个问题。非常感谢你的建议!这要求第三方库是用调试符号编译的。啊,也许不是。。。但是我发现我不能在ServletResponse接口中设置方法断点,而我可以在实现类(ServletResponseWrapper)中设置方法断点。@AdamMonsen我理解这种混淆,但是如果你仔细想想,当然你不能在抽象方法上设置有意义的断点……该方法永远不会被调用,没有可将断点编入的二进制文件。Eclipse没有“在该方法的所有重写开始时放置断点”的功能,只是在特定的具体实现中放置断点。@akapelko它在当前版本的Eclipse中仍然存在……也许您误解了方向?给出的步骤是打开类文件,然后在该类文件处于焦点的情况下,打开“大纲”视图,然后右键单击该方法。在类文件编辑器中看不到类大纲。它也可以从包资源管理器中方法的右键单击菜单中获得。这仍然有效吗?当我打开一个类文件时,我只得到
类文件查看器无法处理给定的输入('org.eclipse.ui.ide.FileStoreEditorInput')。
它应该从主文件菜单中的“打开文件…”对话框工作还是有一个特殊的对话框?在调试外部库时,如果我们看到该库中的注释