はじめに
gccの-fdump-treeオプションには、たくさんのswitchやoptionsを付けれるようだ。
これで制御フローグラフを楽に! 簡単に!! 作れないか試してみた。
ずばり、オプションは、
-fdump-tree-cfg-graph
これだ!
いろいろ試していると、これで出力できた。
(使えるgccのバージョンなどは、調査してない。すまない。)
では、実際のサンプルを
#include <stdio.h>
int main( int argc, char* argv[] )
{
if ( argc )
{
printf("%s\n", argv[0]);
}
return 0;
}
こんなんでいいかな。サンプルコードだし。
サンプルコードをgraphvizファイルへ変換
gcc -fdump-tree-cfg-graph sample.c
そうすると、
- sample.c.011t.cfg
- sample.c.011t.cfg.dot
というファイルが出来上がる。(これ以外に実行ファイルも)
必要なのは、拡張子がdotのファイルの方
制御フローグラフの画像へ変換
dot -Tpng -o sample.c.png sample.c.011t.cfg.dot
これで、sample.c.pngというファイルが出来上がる。
こんな↓感じだ。ほほう。
ちょっとサンプルコードを変更してみる
例えば、ループとかにしてみると、どうなるのだろう。
#include <stdio.h>
int main( int argc, char* argv[] )
{
for( int i=0; i<argc; i++ )
{
printf( "www\n" );
}
return 0;
}
出来上がったのは、こちら↓
for文の継続条件式が、bb 4のブロックでifになっている。
ということで
これが、使えるのか、使えないのか、
制御構造がややこしい関数に出くわしたときに、
ちょっと試してみたい。
では。