Eclipse在调试时跳过行

我是java和eclipse的新手,我一直在尝试在设备上调试Android应用程序。 这是一个带有jar文件引用的小项目。 我读过类似的问题,但他们没有帮助。

我需要的是能够调试jar文件的源代码,所以我附上了源代码(我使用反编译器获得),我能够进入库的源代码,所以我认为我做得正确。 但我无法成功调试这些源代码; 在调试模式下,它会跳过断点(只有源文件中附加到jar文件中的断点),当我尝试“进入代码”时,它会转到随机行,在调试时跳过行。

我正在使用最新版本的eclipse,android sdk和jdk。 我不知道是什么导致了这个问题,我想知道。

在此先感谢,我希望我能充分解释。

问题是,您无法反编译类文件以进行调试。 因为反编译文件的行与原始Java源代码行不同(想象一下:真正的源代码有一些注释和其他不会编译成类文件的东西)!

因此,如果Eclipse向您显示当前的调试行42 ,那么它只会告诉您调试器将在类文件中显示42th行代码。 这与您反编译的java源文件不匹配。

但是,您可以使用选项添加行号作为注释来反编译类文件。 注释中的这些行号可以与实际的堆栈跟踪行号进行比较。 这可以帮助您想象一下这个问题。

编辑:正如Laurent B推荐的那样,您将能够使用JD-Eclipse重新调整代码,请参阅: http : //mchr3k.github.io/jdeclipse-realign/

评论+1! 🙂

edit2:如果使用标志-g:none编译类文件,您将无法使用行号进行反编译:

-g:无
不要生成任何调试信息。

所以如果是这样的话:尝试找到你的jar文件的原始源代码!

反编译器不会获得确切的源代码,但会尝试从生成的字节码重新创建它。

这是一个熵过程,因此Decompile(Compile(Source))不会输出Source(您丢失的信息),例如行号。 这就是为什么你需要原始的源代码。 如果你没有它,你将不得不使用你的immagination能够遵循代码:)

编辑:显然一些反编译工具可以为你做,如bobbel所述。 看到jdeclipse插件 。

尝试按F6逐行调试代码

经过反编译的源代码有时就像那样。 不幸的是,唯一的解决方案是停止调试jar并在Web上搜索源代码并将其添加到项目中。

它表明源文件和Jar不一样。 尝试获取正确的Source版本。