大伙在没有 ai 的时候都是怎么分析开源项目的源代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Suger828
V2EX    程序员

大伙在没有 ai 的时候都是怎么分析开源项目的源代码

  •  
  •   Suger828 12 小时 0 分钟前 1016 次点击

    现在有了 ai 我遇到不懂的方法直接让 ai 分析输入输出和调用关系直接就出来了 例如:opencode 的源代码

    用户发送消息 ↓ ┌─────────────────────────────────────────────────────────────┐ │ Server (routes/session.ts:733) │ │ SessionPrompt.prompt({ ...body, sessionID }) │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionPrompt.prompt (prompt.ts:151) │ │ 1. 创建用户消息 │ │ 2. 调用 loop(sessionID) │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionPrompt.loop (prompt.ts:258) │ │ while (true) { │ │ 1. 获取 Agent 配置: Agent.get(lastUser.agent) │ │ 2. 解析工具: resolveTools({ agent, session, ... }) │ │ 3. 创建处理器: SessionProcessor.create(...) │ │ 4. 调用处理器: processor.process({ user, agent, ... }) │ │ } │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionProcessor.process (processor.ts:45) │ │ while (true) { │ │ 1. 调用 LLM: LLM.stream(streamInput) │ │ 2. 处理流式响应: │ │ - reasoning-delta → 更新推理部分 │ │ - text-delta → 更新文本部分 │ │ - tool-call → 执行工具 │ │ 3. 工具执行完成后继续循环 │ │ } │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ LLM.stream (llm.ts) │ │ 1. 构建系统提示词 │ │ 2. 调用 AI SDK: streamText({ model, messages, tools }) │ │ 3. 返回流式响应 │ └─────────────────────────────────────────────────────────────┘ 

    TUI Server 通信机制

    架构图

    ┌─────────────────────────────────────────────────────────────┐ │ 主线程 (thread.ts) │ │ - 运行 TUI 界面 │ │ - 创建 RPC 客户端 │ └─────────────────────┬───────────────────────────────────────┘ │ RPC 通信 ┌─────────────────────────────────────────────────────────────┐ │ Worker 线程 (worker.ts) │ │ - 运行 Server.App() │ │ - 处理 fetch 请求 │ │ - 转发事件 │ └─────────────────────────────────────────────────────────────┘ 

    Worker 启动流程

    用户运行 `opencode` ↓ index.ts 解析命令 → TuiThreadCommand ($0 默认命令) ↓ thread.ts handler 执行: ↓ 第 79-85 行:确定 worker 文件路径 ↓ 第 93 行:创建 Worker 线程 const worker = new Worker(workerPath, { env: ... }) ↓ 第 101 行:创建 RPC 客户端与 Worker 通信 const client = Rpc.client<typeof rpc>(worker) ↓ 第 143 行:启动 TUI 界面 const tuiPromise = tui({ url, fetch: customFetch, ... }) 

    之前没有 ai 的时候经常一个方法看半天看不懂

    12 条回复    2026-01-27 08:39:12 +08:00
    changwei
        1
    changwei  
       11 小时 41 分钟前   1
    其实搜一下源码分析方面的博客文章还是蛮多的

    有动态分析和静态分析

    动态分析最简单的办法就是打断点,从入口开始一行一行跟着走,然后做笔记记录

    静态分析就是用 SourceInsight 或者任何一个支持 F12 找到原始 definition 的 IDE/Editor 逐层查看调用链,然后做笔记记录

    如果不知道编译或者不知道项目怎么跑起来的话就先去看 CI 配置
    thinszx
        2
    thinszx  
       11 小时 30 分钟前
    我们那时候哪有这条件啊
    x86
        3
    x86  
       11 小时 23 分钟前
    ctrl+c,ctrl+v,ctrl+shift+f
    donaldturinglee
        4
    donaldturinglee  
       10 小时 45 分钟前
    只要不是 Java 的就还好,有基础的基本上能看懂。Java 的话得一层层点进去才知道是要干嘛的
    jackmod
        5
    jackmod  
       10 小时 28 分钟前
    能在自己机子上编译跑起来就成功了一半,剩下是俺寻思之力。
    俺寻思这个文件是那个功能,就直接观察。
    俺寻思这个 method 是对的,下个断点。
    为啥能俺寻思,因为特定语言或框架都有相应特点,基本上能猜到里面是啥。

    实在俺寻思不出来的话也不要憋着,去发个 issue 询问维护者(注意「提问的智慧」)。
    ProphetN
        6
    ProphetN  
       10 小时 1 分钟前
    所以以前经常出现开源投毒,以后有 AI Review 之后,应该可以根绝了。
    aisk
        7
    aisk  
       8 小时 14 分钟前
    用 deepwiki 或者 codewiki ?
    youshangdemajia
        8
    youshangdemajia  
       5 小时 54 分钟前
    以前很多各种源码剖析之类的书。我就看过 MFC/STL/Lua/Redis 的。
    levelworm
        9
    levelworm  
       2 小时 52 分钟前
    @changwei #1
    多谢。我最近在看操作系统开发的东西,做完了 xv6 的 lab ,转过头去做 Linux 的,感觉两者的复杂度相差太远。我目前用 VSCode + clangd lang server 看,但是感觉还是没头绪,不知道有没有免费的 sourceinsight 之类的软件,或者相对便宜一些的?

    不过话说回来,我可能还是底子太薄弱了,连 Linux 的编译系统也看不懂。一大堆 Makefile 和 Kbuild ,还有很多 Python 脚本,的确头大,只敢跟着课程跑,生怕一个命令搞错了没法恢复。
    ooo000
        10
    ooo000  
       2 小时 29 分钟前
    OpenGrok
    iorilu
        11
    iorilu  
       2 小时 4 分钟前
    你这个流程图看的很清楚阿

    一般用什么提示词可以得到
    Suger828
        12
    Suger828  
    OP
       55 分钟前
    @iorilu 让 cc 输出方法调用流程
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5546 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 01:34 PVG 09:34 LAX 17:34 JFK 20:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86