目次
2 難しい部分は、コードの変更が必要となるコールツリーのインストールです。
この人のnoteはなかなか良いので、何もすることがない人は見てみてください。
0 calltreeとgraphvizの関係
関数呼び出しグラフを描画する場合は、calltree とgraphviz という 2 つのツールを使用する必要があります。
calltree は関数呼び出し間の関係を生成するために使用され、graphviz は関係図に基づいて画像または PDF を生成するために使用されます。
1graphviz のインストールは非常に簡単です。
calltreeで生成したドットを使って描画するプログラムはgraphvizで、以下の公式サイトのページからダウンロードできます。
または、コマンドを使用して Ubuntu を直接インストールします
sudo apt-get installgraphviz
2 難しい部分は、コードの変更が必要となるコールツリーのインストールです。
まずソースコードをダウンロードします。
Schily Tools - SourceForge.net で /calltree を参照
https://osdn.net/projects/sfnet_schilytools/downloads/calltree/calltree-2.3.tar.bz2/
実際、以下の README にはコンパイル コマンドについてすでに記載されています。
https://github.com/xunknown/calltree/blob/master/GUIDE
インストール:
ダウンロードアドレス: http://download.chinaunix.net/download.php?id=2245&ResourceID=1172
解凍後すぐに make するだけです。make プロセス中にエラーが発生します。これを解決するコマンドは次のとおりです。
1、cp RULES/i686-linux-cc.rul RULES/x86_64-linux-cc.rul
このエラーが発生した場合は、コマンド 1 を実行してください
2、
探す 。-name "*.[c|h]" |xargs sed -i -e "s/fexecve/fexecve_calltree/"
find 。-name "*.[c|h]" |xargs sed -i -e "s/getline/getline_calltree/"
find 。-name "*.[c|h]" -exec grep getline -nH {} \;
探す 。-name "*.[c|h]" -exec grep fexecve -nH {} \;
その後、make は成功します。install を作成するときに忘れずに sudo を追加してください。そうしないと、権限の問題により一部のディレクトリが正常に cp できなくなります。
3.
インストール後、/usr/bin ディレクトリにソフトリンクします。 ln -s /home/XXX/calltree/OBJ/x86_64-linux-cc/calltree /usr/bin/calltree 上記のソフトリンクは作成しませんでしたが、検索します
。コールツリーのインストールディレクトリ
次に、PATH パスを /etc/profile に追加すると、任意のディレクトリで呼び出すことができます。
その後、source /etc/profile が有効になります。任意のディレクトリを呼び出した後、Tab キーを押してコマンドを完了します。成功したことがわかります。
その後、作成者が提供するコマンドに従って Linux カーネルまたは libuv を分析できます。
使用:
-g 関数が配置されているファイルのディレクトリを出力します。
-m パラメータは、main 関数内の関数呼び出し関係を分析するためにのみ使用されます。
-p パラメータがデフォルトです。これは、コードが C 言語プリプロセッサを使用して分析されることを示します。欠点は、私たちが気にしないメッセージが大量に生成されることです。
-np と -p は逆です。コードの分析に C 言語プリプロセッサを使用しないでくださいと書かれています。指定した場合、解析時にエラーが発生する可能性があります。なぜなら、オープンソース プロジェクトのように、前処理を必要としないプロジェクトがどれだけあるでしょうか?
-xvcg パラメーターは、VCG ソフトウェアで処理できる形式でファイルをエクスポートすることを示します。
-dot パラメーターは、graphviz で処理できるドット形式ファイルのエクスポートを示します。
List を使用すると、分析する必要がある関数内の関数呼び出しのみを指定できます。
もう 1 つの重要なオプションは listfunction で、その省略形は lf で、特定の関数の呼び出しのみを出力するために使用されます。
次のいずれかを使用します。
#calltree -np -b list=start_kernel Depth=3 `find ./init/ ./kernel/ -name "*.c"` > マップ
#vi マップ
2 つを使用します:
calltree -np -b -dot list=start_kernel ./init/*.c > ~/start_kernel.dot
dot -T png start_kernel.dot -o ./testhaha.png
3 つを使用します:
calltree -dot list="ev_run" *.c > ev_run.dot
dot -Tgif ev_run.dot -o ev_run.gif
参考リンク:
https://www.2cto.com/kf/201707/660151.html
http://www.cnblogs.com/mylinux/p/6145625.html
Doxygen の使用
ここに添付されているのは、Windows プラットフォーム用のコール グラフを生成でき、単独で使用できるツールです。
Linux 部分は次の 2 つのコマンドを使用してインストールできます。
sudo apt install doxygen
sudo apt install doxygen-gui
ターミナルに「doxywizard」と入力して ツールを起動します
私の構成は上に示したとおりです
次のタブで、最初の 6 項目を確認します。
これら 2 つをチェックしてからパスを指定する必要があります
開いてみると、ここにはたくさんの参考コンテンツがあります。
関数呼び出し図もいくつかあります
大量のindex.htmlが生成され、ファイルが断片化しすぎているため、hugeCHMを使用してhtmlをchmに変換すると見やすくなります。
パッケージのサイズは以前の 500M から 120M に変更されましたが、それでも大きすぎ、形式も html ほど優れていないため、html バージョンを確認することをお勧めします。
参考
cflowアドレス
この人のnoteはなかなか良いので、何もすることがない人は見てみてください。
私は、calltree のより良い代替手段として、callgraph という別のツールを発見しました。