LoginSignup
11
5

More than 5 years have passed since last update.

gccを使って、制御フローグラフを作成

Last updated at Posted at 2017-12-14

はじめに

gccの-fdump-treeオプションには、たくさんのswitchやoptionsを付けれるようだ。

(参考) GCC Developer 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というファイルが出来上がる。
こんな↓感じだ。ほほう。

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になっている。

sample_loop.c.png

ということで

これが、使えるのか、使えないのか、
制御構造がややこしい関数に出くわしたときに、
ちょっと試してみたい。

では。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5