秀丸エディタでソースを読む

  • 投稿日:
  • by
  • カテゴリ:



タグジャンプとか



IDE、EclipseやEmacsがなくてもソースを自在に読むことはできます。


秀丸エディタならタグジャンプ機能は最初から組み込まれていますが、ちょっとした設定が必要です。


今日読むのはLinuxカーネルのソースです。


カーネルのソースにはサブディレクトリが1500個以上、ファイルも25000個以上あります。


.cのソースファイルは11000個以上、 .hも10000個以上あります。


ほかにもアセンブラのソース.sも1000個くらいあります。



ではまずソースのルートディレクトリにあるREADMEを開きます。



メニュー[その他]>tagsファイルの生成



f:id:syasuda:20090523121426p:image


こんなダイアログが出ますので、「サブフォルダも検索」にチェックを入れてOKボタンを押します。


f:id:syasuda:20090523121353p:image



ファイル数が多いので、結構時間がかかります。プログレスダイアログが閉じると、ソースのルートディレクトリにtagsというテキストファイルが出来ています。


中はこんな感じ。



・・・


kernel\sched.c(135) : static inline u32 sg_div_cpu_power(const struct sched_group *sg, u32 load)


kernel\sched.c(144) : static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val)


kernel\sched.c(151) : static inline int rt_policy(int policy)


kernel\sched.c(158) : static inline int task_has_rt_policy(struct task_struct *p)


kernel\sched.c(183) : static enum hrtimer_restart sched_rt_period_timer(struct hrtimer *timer)


kernel\sched.c(205) : void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime)


kernel\sched.c(217) : static inline int rt_bandwidth_enabled(void)


kernel\sched.c(222) : static void start_rt_bandwidth(struct rt_bandwidth *rt_b)


kernel\sched.c(253) : static void destroy_rt_bandwidth(struct rt_bandwidth *rt_b)


kernel\sched.c(309) : void set_tg_uid(struct user_struct *user)


・・・



grep結果と同じで、関数定義がどのファイルにあるかを羅列してあるわけです。


さて、このtagsファイルを使ってタグジャンプ(ダイレクトタグジャンプ)する前にちょっと設定が必要です。


f:id:syasuda:20090523121931p:image


「上級者向け設定」にチェックを入れて、[動作環境]-[tagsファイル]の「上の階層もチェックする」にチェックを入れておきます。


チェックを入れない場合は、各ディレクトリにtagsファイルを置いておく必要があります。大規模ソースを編集する場合は、頻繁にtagsファイルを再生成する必要があり、1個のtagsファイルで運用するのは、やや問題がありますが、ここではソースを読むだけなので、ここにチェックを入れて、tagsファイル1個で進めます。


さてタグジャンプの具体例です。


kernel/user.cの以下の関数定義付近を見てください。



static int sched_create_user(struct user_struct *up)



f:id:syasuda:20090523122444p:image


sched_create_groupという関数名の上にカーソルを置き、メニュー[その他]-[ダイレクトタグジャンプ]を選択すると、kernel/sched.cが開き、カーソルが



struct task_group *sched_create_group(struct task_group *parent)



という関数の上に来ていると思います。こんな感じで、tagsファイルを生成した配下の関数定義場所に自在にジャンプすることができます。同じ名前の関数が複数ある場合には、一覧が出ますのでご安心を。


ジャンプする前の場所に戻りたいときには、[バックタグジャンプ]です。


重要箇所を覚えておきたいときには、マーク機能でマークを付けます。[検索]-[マーク一覧]-『追加』です。このマーク機能は、微妙に重要です。ソースを読む場合にマーク機能を使わないと効率が相当悪いです。



最後に、アウトライン解析の表示です。[表示]-[アウトライン解析の枠]でソースファイル内のアウトラインが表示されます。


f:id:syasuda:20090523123134p:image



というわけで、



  • タグファイル生成とタグジャンプ

  • マーク

  • アウトライン表示


について簡単に紹介しました。他のテキストエディタでも同様のことができます。




入門 正規表現 ~検索・置換・テキスト処理に強くなる!

入門 正規表現 ~検索・置換・テキスト処理に強くなる!