java-callgraph2 icon indicating copy to clipboard operation
java-callgraph2 copied to clipboard

请问这些文件的内容说明在哪里,从readme中看不出来,十分感谢

Open ZupeiNie opened this issue 2 years ago • 15 comments

问题

ZupeiNie avatar Mar 19 '23 10:03 ZupeiNie

代码改了,文档还没时间写,要过一段时间 这些数据会写到数据库,可以参考下对应的表结构说明

https://github.com/Adrninistrator/java-all-call-graph/tree/main/java-all-call-graph/src/main/resources/_jacg_sql

Adrninistrator avatar Mar 19 '23 10:03 Adrninistrator

在methon_call.txt中有(STA),(SPE),(_ACT_C)等相关内容,请问具体含义是什么

ZupeiNie avatar Mar 19 '23 11:03 ZupeiNie

https://github.com/Adrninistrator/java-callgraph2/blob/main/src/main/java/com/adrninistrator/javacg/common/enums/JavaCGCallTypeEnum.java

可以参考这个枚举类的注释

Adrninistrator avatar Mar 19 '23 11:03 Adrninistrator

method_call.txt中,若下面的这个参数不存在含义是? callee_obj_type varchar(10) NOT NULL COMMENT '被调用对象类型,t:调用当前实例的方法,sf:调用静态字段的方法,f:调用字段的方法,v:调用其他变量的方法',

ZupeiNie avatar Mar 19 '23 11:03 ZupeiNie

说明不是调用了对象的方法,一般是调用了静态方法或者Lambda表达式等

Adrninistrator avatar Mar 19 '23 11:03 Adrninistrator

请问构建函数CG时细化到了函数的访问级别吗,即是否可知调用的和被调用的函数的访问级别

ZupeiNie avatar Mar 19 '23 12:03 ZupeiNie

https://github.com/Adrninistrator/java-all-call-graph/blob/main/output_example.md

调用链输出结果可以参考这个文档

org.mybatis.spring.MyBatisExceptionTranslator:initExceptionTranslator() [0]#org.mybatis.spring.MyBatisExceptionTranslator:initExceptionTranslator [1]# org.mybatis.spring.MyBatisExceptionTranslator:translateExceptionIfPossible (MyBatisExceptionTranslator:88) !entry!

访问级别是指从起始方法开始算的级别吗,对应上面示例的数字

Adrninistrator avatar Mar 19 '23 12:03 Adrninistrator

访问级别指public,protected,private

ZupeiNie avatar Mar 19 '23 12:03 ZupeiNie

这些信息在method_info里,处理调用链时不需要关注方法对应public,protected,private的哪一种吧

Adrninistrator avatar Mar 19 '23 12:03 Adrninistrator

函数调用中有考虑到反射调用吗(想问访问级别的原因)

ZupeiNie avatar Mar 19 '23 13:03 ZupeiNie

现在没有处理反射,如果是用JDK的方法调用通过反射调用,要做额外的处理才能获得通过反射调用的方法信息 如果是用自己封装的代码通过反射调用,要看封装方法的写法

Adrninistrator avatar Mar 19 '23 13:03 Adrninistrator

你好,在这里 https://github.com/Adrninistrator/java-callgraph2/issues/10#issuecomment-1475247018 有提到函方法的public,protected,private在method_info中,但我查看运行结果和sql数据库字段解释中没有找到,前者为sql截图,后者为运行结果截图,请问这个在哪里可以找到或者判断 image image

ZupeiNie avatar Jun 19 '23 10:06 ZupeiNie

使用access_flags字段,和Java里的access_flags类似,每一位代表一种含义

参考https://github.com/Adrninistrator/java-all-call-graph/blob/main/java-all-call-graph/src/main/java/com/adrninistrator/jacg/handler/extends_impl/JACGExtendsImplHandler.java

JavaCGAccessFlags javaCGAccessFlags = new JavaCGAccessFlags(accessFlags);

// 先判断是否不满足
if (!includeInterface && javaCGAccessFlags.isInterface()) {
	return false;
}

Adrninistrator avatar Jun 19 '23 11:06 Adrninistrator

image 你好,这是class_info的信息截图,后面的数字是否为该类的access_flags,其访问修饰符(即public,private..)的判断和方法的一致

ZupeiNie avatar Jul 18 '23 11:07 ZupeiNie

是的,上面的数字就是类对应的access_flags

Adrninistrator avatar Jul 18 '23 11:07 Adrninistrator