私が欲しいのは、どの関数が特定の関数 A() (C プロジェクト内) を呼び出すか、どの関数がそれらの関数を呼び出すかなどを教えてくれるツールです。それらが呼び出されると、関数 A() が呼び出される可能性があります。
たとえば、次の関数がプロジェクトに散らばっています。
void A()
{ /*does something*/ }
void B()
{
A();
/*and more stuff*/
}
void C()
{
if(unlikely_to_be_false)
A()
/* moar stoff */
}
void D()
{
/* code that does not refer to A() at all */
}
void E()
{
C()
}
素晴らしいツールをパラメータ A で実行すると、関数 BC と E が何らかの形で返されます。
これに近いですが、正確には達成したくありません。プロジェクトのどこかに変数がある場合、それに対するすべての読み取り/書き込み操作(直接または間接)を見つけます。
例えば:
void A()
{
char* c; // this is our little variable
B(c); // this is in the resulting list
}
void B(char* x)
{
printf("%c", x); // this is definately in the list
*x='d' // this is also in the list
C(x); // also in the list
}
void C(void* ptr)
{
ptr = something; // also in the list
}
上記が emacs でうまく動作することができれば、私は非常に喜んでいます!