java-callgraph2
java-callgraph2 copied to clipboard
是否有支持判断A函数调用B函数(非直接调用)的接口
你好,请问该项目是否有支持判断A函数调用B函数(非直接调用)的接口
https://github.com/Adrninistrator/java-all-call-graph/blob/main/java-all-call-graph/src/main/java/com/adrninistrator/jacg/extractor/entry/CallerGraphBaseExtractor.java
使用这个类的baseExtract()方法
先生成A函数向下的方法完整调用链
再根据B函数查找A函数间接调用B函数的调用堆栈(需要把B函数配置在_jacg_find_stack_keyword/find_stack_keyword_4er.properties
文件中)
最后获取对应的调用堆栈文件及相关信息
对类的设置可以参考https://github.com/Adrninistrator/java-all-call-graph/blob/main/java-all-call-graph/src/test/java/test/run_by_code/base/TestRunByCodeBase.java,和配置文件的参数是对应的
文档现在还没时间整理
上面是从上往下查找的方式,从下往上查找也可以:
https://github.com/Adrninistrator/java-all-call-graph/blob/main/java-all-call-graph/src/main/java/com/adrninistrator/jacg/extractor/entry/CalleeGraphEntryExtractor.java
使用这个类的extract()方法
先生成B函数向上的方法完整调用链
再根据A函数查找B函数间接被A函数调用的调用堆栈(需要把A函数配置在_jacg_find_stack_keyword/find_stack_keyword_4ee.properties
文件中)
最后获取对应的调用堆栈文件及相关信息
如果有需要的话我可以提交一个示例代码
那麻烦上传一份示例代码,十分感谢
判断指定的两个方法之间是否存在调用关系(直接或间接的),从被调用方法开始向上查找
使用https://github.com/Adrninistrator/java-all-call-graph项目:
- 步骤1
执行gradlew test_jar
命令
生成示例代码的jar包
- 步骤2
执行test.run_by_code.TestRBC0RunnerWriteDb
类
解析示例代码jar包,并写入数据库
- 步骤3
通过com.adrninistrator.jacg.extractor.entry.CalleeGraphBaseExtractor:baseExtract()
方法,判断指定的两个方法之间是否存在调用关系(直接或间接的)
在OtherConfigFileUseSetEnum.OCFUSE_METHOD_CLASS_4CALLEE
参数中指定被调用方法
在OtherConfigFileUseListEnum.OCFULE_FIND_STACK_KEYWORD_4EE
参数中指定调用方法
为了判断test.call_graph.annotation.CallMethodWithAnnotation:test1()
是否有直接或间接调用test.call_graph.annotation.MethodWithAnnotation:test1()
方法
可执行test.run_by_code.extractor.TestMethodCallRelationshipByEE
类
若有调用,则以上baseExtract()方法返回的list非空,示例略,在_jacg_o_ee目录中会生成对应的方法调用堆栈文件
建议使用这种方式,从被调用方法开始向上查找,需要处理的方法调用比较少
判断指定的两个方法之间是否存在调用关系(直接或间接的),从调用方法开始向下查找
- 步骤1
同上,只需要执行一次
- 步骤2
同上,只需要执行一次
- 步骤3
通过com.adrninistrator.jacg.extractor.entry.CallerGraphBaseExtractor:baseExtract()
方法,判断指定的两个方法之间是否存在调用关系(直接或间接的)
在OtherConfigFileUseSetEnum.OCFUSE_METHOD_CLASS_4CALLER
参数中指定调用方法
在OtherConfigFileUseListEnum.OCFULE_FIND_STACK_KEYWORD_4ER
参数中指定被调用方法
为了判断test.call_graph.annotation.CallMethodWithAnnotation:test1()
是否有直接或间接调用test.call_graph.annotation.MethodWithAnnotation:test1()
方法
可执行test.run_by_code.extractor.TestMethodCallRelationshipByER
类
若有调用,则以上baseExtract()方法返回的list非空,示例略,在_jacg_o_er目录中会生成对应的方法调用堆栈文件
我现在是没使用java-all-call-graph这个工具,还只是用java-callgraph2这个工具,得到了调用关系,想通过这里单条的调用数据生成调用链,不知道你是怎么实现获得调用链的
java-all-call-graph是用来生成调用链的,把调用关系写到数据库之后再读取出来,用来生成调用链