语法树的Java代码自动化插桩

代码插桩是测试和定位问题的常用手段,通过在代码对应位置插入相应的代码(“桩”),来打印或收集我们所需要的数据。

自动化插桩,也就是在代码的特定位置,自动的插入我们需要的一行或几行代码。通常我们会在编译后的代码上进行插桩,这样做好处就是避免了对源码的侵入,一定程度上屏蔽了开发者不同的代码风格。这里,我们主要介绍另一种在源码上插桩的方式,如果不考虑对代码的侵入性,那么在源码上直接插桩会更加直观,也就更加容易把控和调试,具有更高的灵活性,而且本文将要介绍的这种方法也无须考虑不同的代码风格。

插桩需求

以一段结构比较简单的Java代码为例,假设我们有一个后缀名为".java"的源码文件,需要在里面的每个方法的开头插入一行代码打印当前方法的名字,在代码执行时,让我们能够知道哪个方法被调用过,以便绘制整个工程的调用关系图。文件中的源码如下:

package com.ast.pkg;

public class ASTDemo {
    int intData = 0;
    double floatData = 0;
    String strData = "";

    //construction
    public ASTDemo() {
        this.intData = 123;
        this.floatData = 3.14;
        this.strData = "It's been a long time.";
    }

    public void setIntData(int data) {
        this.intData = data;
    }

    public String getStrData() {
        return this.strData;
    }

    public void methodDemo(String param1, String param2) {
        if (null == param1 || null == param2) {
            return;
        }

        if (param1.length() > param2.length()) {
            strData = strData + param1;
        } else {
            strData = strData + param2;
        }
    }
}
 亲爱的小伙伴们,有需要java面试文档资料的请点赞收藏和转发哦,关注我之后点进我的主页右上角私信(555)即刻领取免费资料哦或点击:https://shimo.im/docs/aBAYVxlBX6IDge3j

显然,我们不可能直接插桩,因为那样即便是你能准确的定位到每个方法的第一行,仍然不具有通用性,同样的代码换一个写法,或者增加一些复杂的代码结构,再或者换个书写习惯,不仅无法识别代码第一行,即便是再开发,也非常复杂。接下来我们换个思

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值