gitをソースレベルで読む話(1)

前々から git のソースコードを読みたいと思っていたのでチャレンジしました。 読み方は gdb というデバッガーを使ったり、リポジトリを参考にしながら読んでいく感じです。 本当はローカルにソースを落として関数を追跡しながら読んでいったほうが良いと思うのですが、手元にC言語の環境がないのでまた今度です。

それで、gdbを使うのにだいぶ苦労しました。 というのも、gdbを使うためにはコンパイル時にオプションをつける必要があるのですが、どこに付ければいいんだという状況で。 とりあえず、Makefileの中に DEVELOPER_CFLAGS という変数があったので DEVELOPER_CFLAGS = '-g'Makefileの中に追記して make してみる。 でも、だめだった。ネットで調べると、私と同じように git を読みたい人がいて記事も書いてくれていたんですが解決方法はない感じでした。

git gdb compile debug で検索してみると、Debugging Git というページを発見。

By default, Git's Makefile compiles Git with debug symbols (-g), but with optimization level -O2, which can lead to some variable being optimized out and thus making the executable harder to debug.

なるほど、一応 debug のオプションはついているのね。ただ、最適化されていて変数のデバッグが難しくなるらしい。 でも、そもそも実行できないんですけどーと思っていると同じページに、Launching Git in a debugger という項目を発見。

GIT_DEBUGGER="/path/to/gdb --args" ./bin-wrappers/git <command> <args...>

GDBだとこのように動かすらしいです。 CodeingGidelines に書いているらしいけど読み落としてました。というか読んでなかった...

それで、上に従って実行するとGDBが動きました。 ただ、GDBは全然使ってこなかったので使い方は調べつつという感じです。

b cmd_add
run add hoge

git add hoge を実行して cmd_add関数で止めてくれます。 次はいよいよソースを読むフェーズです。 とりあえず、以下を読むつもりです。

  • git add
  • git commit

気が向いたら他のコマンドをもう少し読むかも。