0

それは私を驚かせました.ブレークポイントのオートコンプリートのを実行すると、同じメソッドに2つのオプションが表示されました.

test::TestFoo::SendFoo(short)
test::TestFoo::SendFoo(short)::fooID

cpp の場合:

bool TestFoo::SendFoo( short x )
{
   ...
   static unsigned int fooID = 0;

gdb が異なるのはなぜですか? どちらかを使用する利点は何ですか?

C 静的からの誤解を避けるために、C++ としてタグ付けされた質問。

gdb --version
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-56.el6)
...
4

1 に答える 1

2

SendFoo::fooIDSendFooは 2 つの異なる種類のシンボルであり、gdb が提供する 2 つのブレークポイントには違いがあると想像できます。

定義/初期化される行fooIDは、プログラム全体で 1 回だけヒットするため、その行のブレークポイントも 1 回だけヒットする必要があります。関数が呼び出されるたびに関数レベルのブレークポイントに到達する必要があるため、大きな違いがあります。

私の知る限り、関数スコープstaticは、C と C++ の両方で同じことを意味します。変数は、その関数のすべての呼び出し間で共有され、関数が最初に呼び出されたときに初期化されます。

于 2012-12-07T13:13:37.027 に答える