我试图在反编译代码中设置一个条件断点,但是Eclipse一直给我错误:
条件断点有编译错误 原因:计算必须包含表达式或格式良好的状态块。
我的情况非常简单,只是试图与字符串值进行比较。我已经尝试了以下所有的方法,并且每一个都会出错:
myObj.toString() == "abc123"
myObj.toString().equals("abc123")
if(myObj.toString() == "abc123"){ return true; }
true == true我也试过在行尾有或没有分号的每一个组合,间隔和新行的每一个组合,以及有或没有{}包围我的条件的每一个组合。基本上,我不知道为什么这不管用..。
我试图调试的代码在一个jar中,该jar是用decompiled解压缩的。在此代码中,普通断点工作正常。
有人知道这里发生了什么吗?
发布于 2012-04-20 15:27:26
此日食常见问题页面包含正确CBP定义的语法,以及它们无法工作的最常见原因。就你的情况而言,我认为以下几点适用:
如果在类文件不包含局部变量表的类中设置断点,则可能发生这种情况。例如,假设您希望在Class.forName(String)上设置一个条件断点。如果您有rt.jar的源附件,内容辅助将允许您通过其变量名className引用该参数。但是,在调试运行时,只有当类文件包含局部变量表时,才会知道变量名。根据编译时使用的选项,这些信息可能已从类文件中删除。
JD在解压缩jar时可能会生成变量名,因此在条件表达式中使用"myObj“会产生编译时错误。
发布于 2012-04-27 16:04:10
也许条件断点比一般情况下的工作要少。例如,考虑:
发布于 2013-01-02 08:55:02
这可能是日食中的一个bug。eclipse所做的是将一个新方法或类似的方法编织到文件的源代码中,然后将其编译起来。如果在这个过程中出了问题,您的条件断点将神秘地失败。
您可以遵循下面使用的方法,在调试中运行eclipse来尝试跟踪问题:-
https://stackoverflow.com/questions/10248795
复制相似问题