公司动态

如何阅读代码

📅 2026/9/1 16:05:45
如何阅读代码
第一步转变心态 —— 不要“读”代码要“跑”代码找主干砍枝叶拿到 offarray_lioc_defrag_case 这种函数第一遍跳过所有的错误处理if判断、参数校验和细节调试。只看核心流程它申请了什么资源在哪里发生了数据拷贝最后在哪里返回画流程图拿出一张纸把函数里面的 for 循环、goto 分支、核心调用画出来。这是打破代码魔咒最有效的方法。第二步掌握“资源生命周期”追踪法专治内存/块泄露当你看到一个指针或句柄立刻在脑海里标记它1. 出生Acquiremalloc、alloc_pages、blk_alloc。2. 使用Use中间的各种读写操作。3. 死亡Releasefree、kfree、blk_free。追踪法在代码中每当遇到 return、goto、break立刻回头检查“在这个跳出路径之前我之前出生分配的变量死了吗”第三步学会使用“调用图”和“核心结构体”单个函数看不出来全局是因为它像一个没有上下文的段落。抓结构体State内核代码通常围绕一个大结构体运转。比如 defrag_mvl_seg_info_t 和 lioc_blk_mgr_t。把这些结构体当作“大脑”通过 grep 搜索这个结构体在哪些函数里被修改就能理解系统的全貌。抓调用关系利用 cscope 或 ctags 生成索引跳转到函数定义看它是谁调用的它又调用了谁。看别人怎么调用它入参和出参的预期是理解这个函数最核心的方法。第四步掌握核心工具链不仅是看代码更要利用工具帮你“看”。静态分析Static Analysis使用 sparse针对内核、clang-tidy 或 cppcheck。这些工具会把你肉眼看不出的“潜逃路径”如某条分支未释放资源直接标红。动态插桩Dynamic Analysis这就是你之前提到的 -fsanitizeaddress 和 KASAN。当你对某段逻辑不确定时加上它跑一遍测试工具会直接告诉你“第 150 行分配的块在第 300 行未释放”。这是找出后患的最佳老师。第五步系统学习路线推荐要想彻底打通你需要补充以下底层系统的知识1. Linux 内核编程基础强烈推荐《Linux内核设计与实现》第三版Robert Love。重点看第三章进程管理和第四章内核数据结构以及内存管理章节。了解 kmalloc、vmalloc、SLAB 分配器的机制理解为什么内核中的指针和用户态不一样。2. 存储/文件系统架构理解 VFS虚拟文件系统、块设备层Block Layer是怎么运作的。你现在的 offarray 很可能是一个分布式文件系统的底层你需要去了解 RAID 概念、EC纠删码算法、数据副本是如何通过数据结构管理的。3.阅读优秀的真实代码不要去读公司那几千行的私有代码。去读 Linux 内核自带的经典模块比如 drivers/block/ 或 fs/ext4/。挑一个最简短的驱动从头跟到尾看它怎么注册、怎么在读写请求中被调用、怎么释放资源。读通 10 个简单的再看你手上复杂的就有感觉了。小技巧1.先学习业务流程再从对应模块的初始化init开始入手看数据结构看结构体