greys-anatomy icon indicating copy to clipboard operation
greys-anatomy copied to clipboard

能不能支持在任何方法的随意一行中加一段代码?

Open zhaiyuyong opened this issue 7 years ago • 6 comments

public int test(){
    int a = 100;
    return a;
}

在int a=100;后面加一行代码 a = a*100;

zhaiyuyong avatar Dec 25 '17 06:12 zhaiyuyong

  1. GREYS永远不会尝试去修改任何方法的入参和返回值,他的核心职能只能是观察!

  2. 如果你想修改方法的行为,可以用JVM-SANDBOX中间件来实现

  3. 就算在JVM-SADNBOX中,想要在任何方法中随意增加一行代码,甚至修改一个变量从技术上都是可以,但是不会推荐你这样做。不过针对你这个CASE,变量a恰好是返回值,那么最终可以做到这样的效果

    public int _test$aop_by_sandbox(){
      int a = 100;
      return a;
    }
    
    public int test() {
        return _test$aop_by_sandbox()*100;
    }
    

oldmanpushcart avatar Dec 27 '17 01:12 oldmanpushcart

主要是为了在方法里面打印某个变量的值,现在只能看到入参数和返回值

zhaiyuyong avatar Dec 27 '17 07:12 zhaiyuyong

哈哈,这个目前有考虑支持,但以我排查问题那么久的经验,一般局部变量都可以通过推演运算得到(已经明确了入参和返回值的情况下)。

所以,需要观察局部变量的值真的不是太多见呢

oldmanpushcart avatar Dec 27 '17 08:12 oldmanpushcart

这个功能还是有必要的,sandbox还是有点厚重,定位问题时除了打印信息等,还有一个就是要快速规避,这个就需要这能力了

zhenjia001 avatar Feb 05 '18 03:02 zhenjia001

嗯?不是太明白,钉钉聊?

oldmanpushcart avatar Feb 07 '18 10:02 oldmanpushcart

我还是比较赞同 @oldmanpushcart 的意见,greys 核心功能是观察,变量经过入参推算而得,你这要求有就等于做了一个远程debug功能了。

wyuxiao729 avatar Feb 09 '18 04:02 wyuxiao729