Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在第三方库中的Eclipse中设置断点?_Java_Eclipse_Debugging_Breakpoints - Fatal编程技术网

Java 如何在第三方库中的Eclipse中设置断点?

Java 如何在第三方库中的Eclipse中设置断点?,java,eclipse,debugging,breakpoints,Java,Eclipse,Debugging,Breakpoints,我从第三方库得到一个类中的NullPointerException。现在我想调试整个过程,我需要知道类是从哪个对象持有的。但在我看来,我无法在来自第三方的类中设置断点 有人知道我摆脱困境的方法吗?当然,我使用Eclipse作为我的IDE 更新:该库是开源的。您可以轻松地在第三方库中设置方法断点,而无需源代码。只需打开类(您将获得“我没有源代码”视图)。打开大纲,右键单击所需的方法,然后单击切换方法断点以创建方法断点。通常,您应该能够设置断点。特别是如果第三方库是开源的。但是,如果您的第三方库来自

我从第三方库得到一个类中的NullPointerException。现在我想调试整个过程,我需要知道类是从哪个对象持有的。但在我看来,我无法在来自第三方的类中设置断点

有人知道我摆脱困境的方法吗?当然,我使用Eclipse作为我的IDE


更新:该库是开源的。

您可以轻松地在第三方库中设置方法断点,而无需源代码。只需打开类(您将获得“我没有源代码”视图)。打开大纲,右键单击所需的方法,然后单击
切换方法断点
以创建方法断点。

通常,您应该能够设置断点。特别是如果第三方库是开源的。但是,如果您的第三方库来自商业供应商,他们可能在编译源代码时关闭了调试标志。这将使您无法调试到其中。您的供应商可能已将此作为模糊处理过程的一部分,以使库无法反向工程,或者仅仅因为最终编译的类将更小。

您还可以在特定异常上设置断点。从调试的角度来看,有一个按钮“AddJavaExceptionBreakpoint”,您可以在这里添加“NullPointerException”。一旦出现此类异常,调试器将立即暂停执行。

最可靠的方法是下载源代码(您说它是开源的),然后设置另一个指向该源代码的“Java项目”

要做到这一点,请下载源代码并将其解压缩到系统中的某个位置。单击“文件”->“新建”->“Java项目”。在下一个对话框中,给它一个项目名称并选择“从现有源创建项目”。浏览到开源库的根位置

假设您下载的项目中包含了项目所需的所有附加库,Eclipse将为您解决所有问题并设置构建路径

您需要从项目的构建路径中删除开源jar,并将这个新项目添加到项目的构建路径中

现在,您可以将其视为您的代码,并随意进行调试

这至少解决了其他方法的几个问题:

  • 您可以将源代码“附加”到jar文件,但如果jar文件是在没有调试信息的情况下编译的,这仍然无法工作。如果jar文件是使用调试信息编译的(
    行、源、变量
    …请参阅,以及
    -g
    选项)

  • 您可以添加一个“异常断点”来查看何时引发NullPointerException,但这是一个常见的异常,很可能会在您要查找的异常之前引发并处理多次(数百次)。另外,如果没有原始源代码,您将无法真正看到抛出NullPointerException的代码的大部分内容—您能够找出错误的可能性非常低


  • 只需附加源代码(或使用自动附加源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')。
    它应该从主文件菜单中的“打开文件…”对话框工作还是有一个特殊的对话框?在调试外部库时,如果我们看到该库中的注释