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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions