Skip to main content

案例实践1 - codereview

用CoStrict做代码审查和问题定位,3天工作2小时完成

某产品研发部的同事利用AI辅助编程工具CoStrict,定位多平台的采集器Pagent的句柄泄露问题,将原本人工操作需要2-3天的代码审查工作,压缩到只需要2小时内完成。同时,CoStrict检查了所有相关的句柄操作,没有遗漏任何潜在风险点;并准确识别出了最严重的进程句柄处理问题——这是人工审查容易忽略的细节。

1.案例背景

pagent项目是一个多平台的系统监控采集器,用于采集CPU、内存、进程、线程等系统数据并上报到iom平台。最近内部在 Windows平台上发现了严重的句柄泄漏问题,导致进程长时间运行后句柄数量持续增长,最终影响系统性能和稳定性。

传统的排查方式需要开发人员手动分析大量代码,重点关注 Windows API调用(如windows.CloseHandle等),耗时耗力且容易遗漏。面对这个复杂的问题,我们希望借助AI辅助编程工具来提高排查效率。

2.案例实操

操作步骤:

第一步:提供项目背景和问题描述

首先,我给AI提供了一段背景信息:

这个项目是一个多平台的采集器pagent,用来采集cpu、内存,进程,线程等数据,上报到iom平台,但是这个进程在运行时发现了一些句柄泄露问题,尤其是windows端,泄漏非常明显,帮我分析代码,看看哪里有可能出现句柄泄漏

第二步:引导AI了解项目结构

其次,我让AI查看项目根目录,了解整体结构:

<list_files> <path>.</path> <recursive>false</recursive> </list_files>

第三步:逐步深入分析关键代码

接下来,引导AI从主程序开始,逐步分析Windows相关的关键模块:

1.查看主程序文件,了解Windows特定的初始化和清理逻辑
2.分析Windows采集器的核心文件
3.重点查看DLL相关的初始化和清理代码
4.深入分析进程信息采集相关的代码
5.检查性能计数器相关的句柄管理

第四步:提供具体的分析方向

当我发现AI过于关注panic处理时,我及时调整了分析重点,给出如下prompt提示:

主要关注一下windows.CloseHandle的时候,是不是会有些句柄没有释放,pannic的情况比较极端,不用过多考虑

第五步:让AI重点关注具体的技术细节

我引导AI重点关注以下几个方面的句柄操作:

- windows.OpenProcess 和 windows.CloseHandle 的配对使用
- PDH性能计数器句柄的创建和释放
- 进程快照句柄的管理
- 事件句柄和注册表句柄的处理

3.案例效果

1. 全面的问题识别 AI成功识别出了6个主要的句柄泄漏风险点,包括:

  • 进程快照句柄泄漏
  • 进程句柄处理不当(最严重)
  • PDH查询句柄泄漏(高风险)
  • 证书验证句柄泄漏
  • 事件句柄泄漏
  • 注册表句柄泄漏

2. 具体的代码定位 AI不仅发现了问题,还精确定位到了具体的代码行和函数,例如:

  • agent/collector/windows/process.go:484-494 中的进程句柄处理
  • agent/collector/windows/process.go:617-668 中的PDH查询句柄管理
  • common/utils/utils_windows.go:295-300 中的事件句柄处理

3. 实用的修复建议 AI提供了具体的代码修复示例,包括:

  • 句柄有效性检查机制
  • 改进的defer使用方式
  • 错误处理优化策略

相比之前的效果提升:

  • 效率提升: 原本需要2-3天的代码审查工作,在2小时内完成
  • 覆盖度提升: AI检查了所有相关的句柄操作,没有遗漏任何潜在风险点
  • 准确性提升: AI准确识别出了最严重的进程句柄处理问题,这是人工审查容易忽略的细节

4.经验总结

这次AI辅助编程的实践让我深刻体会到,AI工具在代码审查和问题排查方面具有明显优势。它能够快速理解项目结构,系统性分析代码逻辑,准确识别潜在问题,并提供实用的解决方案。

关键的成功因素包括:

  • 清晰的问题描述:明确告诉AI要解决什么问题;
  • 逐步引导:从整体到局部,引导AI深入分析;
  • 及时调整:根据AI的分析结果,及时调整分析重点;
  • 技术细节聚焦:引导AI关注具体的技术实现细节。

AI并不是要替代开发人员,而是成为我们强大的助手。它能够处理大量重复性的分析工作,让开发人员能够专注于更复杂的设计和架构问题。希望大家在实际工作中多尝试使用AI辅助编程工具,把它融入到日常的开发流程中。