2016-05-09 11 views
1

たとえば、ある特定のクラスのメンバー関数へのすべての呼び出しを探したいとしましょう。コールを見つけるだけでなく、各コールに引数を渡すことにも興味があります。たとえば、このコードを分析した後:C++静的解析:メンバー関数が呼び出される場所をすべて見つけよう

AFunction called in file "anyfile.cpp" with arguments "string" and 0 
AFunction called in file "otherfile.cpp" with arguments "anystring" and aValue=5 
... 

私は正規表現を使用して、すべてのソースコードを解析すると思ったが、当然の関数いるため、動作しないこと:

anyfile.cpp: 
myobject.AFunction("string", 0); 

otherfile.cpp: 
otherobject.AFunction("anystring", aValue); 

を私のようないくつかの出力が期待されます他のクラスに出現する可能性があり、引数として使用される変数の値が得られません。

私は何らかの静的解析ツールが必要かもしれないと思うし、決して(まれにしか)起こらない呼び出しにも興味がある。つまり、プログラムを実行していくつかのログを生成しようとするのは解決策ではありません。メソッドが呼び出される場所は数百にも及ぶが、ソフトウェアはほとんどその呼び出しに(まったく)入らない。

+1

EclipseベースのIDEを使用している場合、メソッドを強調表示してCtrl + Shift + Gを使用できます。メソッドのテキストのすべてのインスタンスを見つけるには、Ctrl + Alt + Gを使用してください – Funkyguy

+0

解決策ではありませんが、何千もの呼び出しがあり、後で処理するためにデータが必要です。 – sapito

+0

テンプレート以外の関数に渡される定数のみを収集することが十分でない限り、このような情報を静的に収集することは不可能です。その場合、 '-fdump-tree-cfg'のような' gcc'デバッグフラグを使って遊ぶことができます – rustyx

答えて

1

私はあなたがcscopeを試してみることをお勧めします。データベースファイルを作成するので、シンボルテーブルなどを実行するたびに再ビルドする必要はありません。いくつかのvimスクリプトでは、それを私が確信しているファイルに出力することさえできます。

1

Doxygenを試してみることをおすすめします。呼び出し元と呼び出し先のドキュメントを作成できます。

関連する問題