Debugging 如何在Groovy中访问实例变量?
我有以下课程:Debugging 如何在Groovy中访问实例变量?,debugging,groovy,intellij-idea,gradle,scope,Debugging,Groovy,Intellij Idea,Gradle,Scope,我有以下课程: class MyTask extends DefaultTask { private String param; void setParam(String param) { this.param = param; } @TaskAction void action() { if (param == "test") { println "OK" } } }
class MyTask extends DefaultTask {
private String param;
void setParam(String param) {
this.param = param;
}
@TaskAction
void action() {
if (param == "test") {
println "OK"
}
}
}
它工作正常,但是如果我在IntelliJ IDEA中的if
上设置断点,则无法访问param
的值:
- 变量视图显示
,如果我展开它,就会看到这个
参数
- 如果我运行>计算表达式。。。输入
我可以看到同样的东西这个
- 但是如果我在表达式窗口中键入
:this.param
param
解析为私有实例变量而不是“automagic Groovy属性”?这个还有另一个神奇的变量吗?
修改代码并添加getParam()
不是选项
尝试
基于此建议,@param:
没有此类字段:类的参数:MyTask_
我还尝试了this.class.superclass.getDeclaredField(“param”).get(this)
:
java.lang.IllegalAccessException:类java_lang_reflect_字段$get无法访问修饰符为“private”的类MyTask的成员
这里不涉及automagic Groovy属性。我不知道Groovy中有什么方法可以访问在超类中声明的私有变量(Gradle将在运行时子类
MyTask
),听起来好像调试器的表达式求值也有相同的限制。这。@param
应该work@cfrick见更新,其他想法?问题似乎是由\u修饰的东西引起的。在变量窗口中,绝对没有任何东西可以引导您找到实际值?有这个,我在树中看到它,但我想调用它的方法或将它传递给Evaluate expression中的其他方法是的,这和我得出的结论是一样的,所以它更像是一个想法Groovy bug,因为我记得在调试器中盗版private在Java中是有效的;所以调试器应该有一个播放的方式。我不认为它是一个bug,但可能需要一个特性请求。既然你得出了同样的结论,请接受我的回答。