Skip to content

Latest commit

 

History

History
69 lines (43 loc) · 5.92 KB

File metadata and controls

69 lines (43 loc) · 5.92 KB

読み始める前に

このドキュメントの対象者

このドキュメントではC言語の基本文法の理解し、gccやgdb、make(not Makefile)等のUNIX系の基礎的な開発環境の使い方を知っている人を対象としている。もし、わからない点やこのドキュメントの改善すべき点があればissueにて対応する。

デバッガとデバッグシンボルのインストール

Ubuntu

sudo apt install libc6-dbg glibc-source gdb

Fedora

sudo dnf install gdb
sudo dnf debuginfo-install glibc

GDB FrontEndについて

ソースナビゲーションを使わずにGDBとデバッグシンボルのみでソースを読むことも可能である。その場合大抵のパッケージマネージャから入れるデバッグシンボルは-g2でコンパイルするのでプリプロセッサの一部の情報がなくなっている事があることに注意しよう。また、GDBのTUIを用いるのも悪くはないが外部のGDB FrontEndの方が視覚から入る情報量が多いため格段に読みやすくなる。なので、ここで少しおすすめのGDB FrontEndを紹介する。なお、もっと知りたい場合はGDB Wikiを参照してほしい。

おそらく一番機能が充実していて、一番使いやすいであろうもの。Reverse Debugにも対応しているのでこだわりがなければこれを使うのが一番だと思われる。

  • cgdb

vim likeなキーバインドのCUI FrontEnd。CUI&vimにこだわりがあるならこれがベストであろう。各自使用しているパッケージマネージャからインストールできるはずである。

  • gdbgui

最近結構熱い。データ構造のビジュアライザもあり、わりとお勧め。

ソースコードナビゲーション

ただgrepとエディタを用いて読むのでは日が暮れてしまうのでここではソースコードナビゲーションシステムを用いてソースリーディングを行う。ここではwoboqかSourceWebかDXRを使っている前提で話を進めるがある程度自信とこだわりがあれば他のものを使っていても問題なく読み進められるだろう。

GitHubでインデクサができるようになるブラウザプラグイン。手軽に使えてLSPを使った対応言語も広い本格インデクサなのでお勧め。

Clangを用いたコードナビゲーションシステム。プリプロセッサもある程度補足してくれるらしく関数をすぐに見つけることができる。 サーバーも公開しており一般的なOSSのリーディングを用意無しですぐにすることが可能。いろいろ用意が面倒な人はこれを使うのがいいと思われる。たまにリファレンスが効かないことがあるがGoogle検索を用いることができるので大抵は困ることはない。

C/C++にしか対応していないがコンパイルの手順を一通り追うことでプリプロセッサ等の処理が可能であり、使わない部分と使う部分が明確にわかる・精度が非常に高い等多くの利点がある。・・・のだが、どうやらFedoraではうまくビルドが動かないようである。原因はこのあたり-isystemオプションが悪さしてstdlib.hを見えなくしているというものらしい。もしUbuntu等で動くのならばそれで良いのだが動かなければ早々に諦めたほうが良さそう。ちなみに私は./build/clang-indexerのMakefileの-isystem /usr/include-I/usr/includeに無理やり書き換えてビルドを通した。一応無事に動いてはいる。こちらもたまにリファレンスが効かないことがあるが、全体検索機能はないのでgrep等を用いることを推奨する。

よく使われるタグシステム。大規模なソースでも比較的高速に動作する。また、エディタとの親和性も高く読みながら変更を加えるのには便利。 ただ、プリプロセッサをパースしたりはしないのでプリプロセッサ経由で宣言される変数や関数を検知できない。 ctagsとGNU globalはプラグインを使えば対応言語も多いので多くの言語が混在する場合には便利かもしれない。 今回はプリプロセッサの使用が多く対応できないので使わないこととする。

Mozillaが開発しているコードナビゲーションシステム。Firefox等に使うために開発されているようで、C/C++以外にJavascriptやRustなどにも対応している。デザインには難ありなところがあるがリンク等は精度が高いので非常に便利である。

  • IDE

IDEも一種のナビゲーションシステムとしてソースリーディングに用いることは可能である。EclipseやVisual StudioでMakefile projectを読み込ませれば良いのでさほど難しいことではない。IDEの全機能をリーディングに用いることができるのでそれなりに快適に読める。ただ、非常に読み込みが遅く動作ももっさりするので勧めることはしない。