ブラウジング・クロスリファレンス
ctags
tags の作り方の指針については以下のドキュメントが参考になる。
Exuberant Ctags FAQ 日本語訳
15. 多重ディレクトリ階層のtagファイルを生成するには
http://hp.vector.co.jp/authors/VA025040/ctags/faq.html#15
GNU GLOBAL
ctagsbr
ctags GUI フロントエンド
http://catfish.virtualave.net/ctagsbr/
cflow
GNU cflow もあるらしい
http://www.gnu.org/software/cflow/
cflow の出力を graphviz で可視化するためのスクリプト
(ソースファイルがちょっと大きくなると破綻してしまう)
http://d.hatena.ne.jp/pyopyopyo/20050724/p2
cflow は使える!
http://d.hatena.ne.jp/parasporospa/20071209
どこから呼ばれているかを調べる
-i (invert; 呼びされた方を先に出力する) と -r name (name 以下のみを出力)を組み合わせると、ある関数がどこからどのようにして呼ばれているかを見ることができる。
次の例は hit_return_msg が repeat_message と wait_return から呼ばれていることを示している。
$ cflow -i -r hit_return_msg -I/usr/local/include -I./proto message.c 1 hit_return_msg {message.c 1078} 2 repeat_message {message.c 2829} 3 wait_return {message.c 864}
しかしこの方法は完全ではないようだ。
同じソースに対して global を使ったらこんな結果になった:
$ global -xr hit_return_msg hit_return_msg 22 message.c static void hit_return_msg __ARGS((void)); hit_return_msg 920 message.c hit_return_msg(); hit_return_msg 969 message.c hit_return_msg(); hit_return_msg 2848 message.c hit_return_msg();
GNU cflowの場合
GNU cflow はオプションがちょっと違う。
-r, --reverse * Print reverse call tree -x, --xref Produce cross-reference listing only -m, --main=NAME Assume main function to be called NAM(NAME以下のみを出力)
また、パーサにバグがあるらしく、-m hit_return_msg が正しく表示されなかった。
cflow の output.c の
main_sym = lookup(start_name);
で lookup が NULL を返していたので、多分パーサのバグ。
cxref
クロスリファレンス。htmlで出力できる。
けっこう使えると思う。
http://www.gedanken.demon.co.uk/cxref/
Linux Cross-Reference
CGIとして動作するクロスリファレンス生成器。
http://lxr.linux.no/
Visustin
ソースコードからフローチャートを生成する。
http://www.aivosto.com/visustin.html
対応言語は Ada, ASP, assembler, BASIC, C/C++, C#, Clipper, COBOL, ColdFusion, Fortran, Java, JSP, JavaScript, LotusScript, Pascal/Delphi, Perl, PHP, PL/SQL, PowerScript, PureBasic, Python, QuickBASIC, REALbasic, T-SQL, VB, VBA, VB.NET, Visual FoxPro or XSLT
Standard $299。Pro $599。