最近修改了一个 Go 语言的开源项目,花一天时间加了几百行代码进去,然后开始了漫长的 debug 历程,耗时五天之后,终于成功把修改后的系统跑了起来。
在此记录一下大型项目 debug 经验。
修改源码的时候需要加:
- 执行路径的 log
- 关键数据的 log
主要步骤如下:
- 新建
dev
分支,开始修改源码。 - 修改源码之后不要直接
git add *; git commit -m "feature"
,建议使用git add -e filename
添加改动内容,这个时候不要把添加的 log 加进去。 - commit 修改内容之后,创建新的
devlog
分支,在devlog
分支把添加的 logadd & commit
,假设这次 commit 的 hash 是 4032e67. - 切换
main
分支,创建mainlog
分支,只和并devlog
分支的最新一次提交:git cherry-pick 4032e67
,如果用冲突需要手动 conflict。 - 分别运行
mainlog
和devlog
的代码,然后对比我们加的 log,根据差异定位 bug。
主要用到的命令是 git cherry-pick
这个命令,可以只 merge 某一次 commit,这样就不需要在不同的分支添加 log 了。手动在不同分支维护 log 信息比较枯燥乏味,而且难以时刻保持一致,导致后续对比 log 困难。