我从第三方库中获取了一个类中的NullPointerException。现在我想调试整个事情,我需要知道该类所持有的对象。但在我看来,我无法在第三方的类中设置断点。
有谁知道摆脱困境的方法?当然我正在使用Eclipse作为我的IDE。
更新:该库是开源的。
答案 0 :(得分:62)
您可以在没有源的情况下轻松地在第三方库中设置方法断点。打开课程(你会得到“我没有来源”的观点)。打开大纲,右键单击所需的方法,然后单击Toggle Method Breakpoint
以创建方法断点。
答案 1 :(得分:34)
最有把握的方法(并最终得到实际有用的东西)是下载源代码(你说它是开源的),然后设置另一个指向该源代码的“Java Project”
为此,请在您的系统上的某处下载并解压缩源代码。点击“文件” - >“新建” - >“Java项目”。在下一个对话框中,为其指定项目名称,然后选择“从现有源创建项目”。浏览到开源库的根位置。
假设项目所需的所有其他库都包含在您下载的项目中,Eclipse将会解决所有问题,并为您设置构建路径。
您需要从项目的构建路径中删除开源jar,并将此新项目添加到项目的构建路径中。
现在,您可以将其视为您的代码,并随意调试。
这至少解决了其他方法的几个问题:
您可以将“附加源”附加到jar文件,但如果编译的jar文件没有调试信息,则仍然无法正常工作。如果jar文件是使用调试信息编译的(lines,source,vars
...请参阅http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javac.html和-g
选项)。
你可以添加一个“异常断点”来查看NullPointerException何时被引发,但这是一个常见的异常,并且可能会被引发并在你之前的许多(数百?)次处理寻找。另外,如果没有原始资源,您将无法真正看到有关抛出NullPointerException的代码的任何内容 - 您将能够找出错误的可能性非常低。
答案 2 :(得分:6)
您还可以在特定异常上设置断点。从Debug透视图中,有一个“添加Java异常断点”按钮,您可以在其中添加“NullPointerException”。一旦引发异常,您的调试器就会暂停执行。
答案 3 :(得分:1)
通常,您应该能够设置断点。特别是如果第三方库是开源的。但是,如果您的第三方lib来自商业供应商,他们可能已经关闭了调试标志来编译源。这将使您无法调试它。您的供应商可能已经将此作为混淆过程的一部分,因此无法对库进行反向工程,或者只是因为最终编译的类会更小。
答案 4 :(得分:1)
只需附加源(或使用自动附加源jar的内容)然后通过双击感兴趣的行的左侧以正常方式设置断点。
答案 5 :(得分:1)
为了使用maven物化网络应用程序,我必须做三件事。
1)使用第三方jar的源代码创建一个新的eclipse项目。
2)从pom.xml依赖项中删除对jar的引用。
3)在项目属性中将新的eclipse项目添加到Deployment Assembly。
4)将新的eclipse项目添加到项目Properties - > Java构建路径 - >引用第三方项目的现有项目的项目。
如果第3个项目已经正确地添加到您的maven存储库,使用源代码,maven将自动下载相应的源代码并允许您添加断点,而无需执行上述任何步骤;但是,我了解到你不能总是指望这一点。