3

次の関数callaをcallbに置き換えたい(参照:C内の任意のスレッドからコールスタックを取得する

int calla()
{
   printf("Inside calla\n");
   printf("A1=%x\n",__builtin_return_address (0));
   printf("A2=%x\n",__builtin_return_address (1) );
   printf("A3=%x\n",__builtin_return_address (2) );
}


int callb()
{
   int i,j;
   j = stackdepth(); 
   for (i=0 ; i<j ;i++) 
   printf("%x\n",__builtin_return_address (i));
}

スタックの深さを見つける方法は?

4

1 に答える 1

1

これはgcc、および特定のプラットフォームでのみ機能します。ここですべてのドキュメントを再入力することもできますが、簡単に入手できます。info gcc少なくともバージョン4.7.2を使用している場合は、gccマニュアル()のセクション6.48であり、ここからオンラインになっています。

「レベル引数は定数整数でなければなりません」という文に注意してください。これはループをトリッキーにします。

からスタックの高さを確実に取得することはできませんが__builtin_return_address、ドキュメントによると__builtin_frame_address、スタックの一番上に到達すると0が返されます。

于 2012-12-19T02:32:12.787 に答える