Skip to content

Bug Report: Call graph construction incomplete - missing intra-file function call edges #104

@RacerZ-fighting

Description

@RacerZ-fighting

问题描述

YASA 不同版本的调用图构建存在不同部分缺失的问题:

  • 0.2.33 (新版本): 调用链的前半部分完整后半部分缺失
  • 0.2.1 (老版本): 调用链的前半部分缺失后半部分完整

两个版本合并后才能得到完整的调用链。

环境信息

复现步骤

./yasa-engine-linux-x64  --dumpAllCG --sourcePath requests/src --analyzer PythonAnalyzer  --uastSDKPath ./uast4py-linux-amd64 --report ./report

版本对比结果

版本 get → request request → Session.request urllib3.util.parse_url 说明
0.2.33 存在 ✅ 存在 缺失 前半部分完整
0.2.1 缺失 缺失 存在 后半部分完整

详细分析

0.2.33 (新版本) callgraph.json

节点数: 674
边数: 757

✅ 前半部分完整:
  get(api.py) → request(api.py)  ← 存在!
  request(api.py) → Session.request ← 存在!
  Session.request → Session.prepare_request ← 存在!
  ...

❌ 后半部分缺失:
  → urllib3.util.parse_url  ← 不存在!

0.2.1 (老版本) callgraph1.json

节点数: 1889
边数: 2125

❌ 前半部分缺失:
  get(api.py) → request(api.py)  ← 不存在!

✅ 后半部分完整:
  ... → PreparedRequest.prepare_url → urllib3.util.parse_url  ← 存在!

合并后 (callgraph_merged.json)

节点数: 1921
边数: 2772

✅ 完整调用链 (合并两个版本后):
  get(api.py) → request(api.py) ← 来自新版本
    → Session.request ← 新版本
      → Session.prepare_request ← 老版本
        → PreparedRequest.prepare ← 老版本
          → PreparedRequest.prepare_url ← 老版本
            → urllib3.util.parse_url ← 老版本

预期行为

最新版本应该能构建完整的调用链:

requests.get(api.py)
  → request(api.py)
    → Session.request(sessions.py)
      → Session.prepare_request(sessions.py)
        → PreparedRequest.prepare(models.py)
          → PreparedRequest.prepare_url(models.py)
            → urllib3.util.parse_url

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions