Adrninistrator / java-callgraph2

Programs for producing static call graphs for Java programs.
Apache License 2.0
184 stars 66 forks source link

您好,请问method_call中为什么没有<clinit>()? #26

Open lly-ss opened 1 year ago

lly-ss commented 1 year ago

如果一个函数调用了另一个类的静态field,method_call.txt中没有显示这种调用关系吗?

Adrninistrator commented 1 year ago
方法的调用不会出现在`method_call`表里 方法调用的被调用对象,或者被调用参数涉及到类的静态字段时,相关信息会保存在`method_call_info`表中,通过`call_id`字段关联到`method_call`表 但是对于String之类的类型,这些在class文件里是常量的形式,不会有静态字段形式存在
lly-ss commented 1 year ago

所以如果某个函数调用了另一个类的静态字段,这种有()的调用关系需要在哪个txt文件里找呢?

Adrninistrator commented 1 year ago

方法的调用不会出现在method_call表里

方法调用的被调用对象,或者被调用参数涉及到类的静态字段时,相关信息会保存在method_call_info表中,通过call_id字段关联到method_call

但是对于String之类的类型,这些在class文件里是常量的形式,不会有静态字段形式存在

对应的txt文件是method_call_info.txt

lly-ss commented 1 year ago

作者您好,我看了sql表后还是对这几个txt文件搞不太清除,您可以解释一下method_call_info.txt,method_info.txt,method_arg_generics_type.txt,method_call.txt和method_return_generics_type.txt这几个文件存储的是一些什么信息吗? 感激不尽!

Adrninistrator commented 1 year ago

方法的信息,完整方法及access_flags、返回类型等

方法调用,调用方法和被调用方法的信息

方法调用中,被调用对象和参数涉及的可能的值和类型

方法的参数中涉及的泛型中的类型,比如List

方法的返回类型中涉及的泛型中的类型,比如List

可以参考sql文件中的COMMENT