Eclipse条件断点坏了吗?

kan*_*and 8 java eclipse debugging breakpoints decompiler

我试图在反编译代码中设置一个条件断点,但Eclipse不断给我错误:

条件断点有编译错误

原因:评估必须包含表达式或格式良好的语句块

我的情况非常简单,只是尝试与字符串值进行比较.我已经尝试了以下所有内容,但每个单独出错都会出错:

myObj.toString() == "abc123"
myObj.toString().equals("abc123")
if(myObj.toString() == "abc123"){ return true; }
true == true
Run Code Online (Sandbox Code Playgroud)

我也尝试过在行尾添加或不使用分号的每种组合,以及间距和换行符的每种组合以及包含或不包含{}的每种组合.基本上,我不知道为什么这不起作用......

我试图调试的代码是在一个用JD-Eclipse反编译的jar中.正常断点在此代码中正常工作.

有谁知道这里发生了什么?

maz*_*cha 4

Eclipse FAQ页面包含正确 CBP 定义的语法以及它们不起作用的最常见原因。对于你的情况,我认为以下内容适用:

如果您在类文件中不包含局部变量表的类中设置断点,则可能会发生这种情况。例如,假设您要在 Class.forName(String) 上设置条件断点。如果您有 rt.jar 的源附件,内容辅助将允许您通过变量名称 className 引用参数。但是,在调试运行时,只有在类文件包含局部变量表时才知道变量名称。根据编译时使用的选项,此信息可能已从类文件中删除。

JD 可能在反编译 jar 时伪造了变量名称,因此在条件表达式中使用“myObj”会产生编译时错误。

  • 听起来很有希望,但 OP 显然尝试了 true == true,即使变量名称被破坏,它也应该有效! (3认同)