1

gdb を使用すると、奇妙な問題が発生しました。3 回表示されるメソッドがあります。

(gdb) b Logger::Logger
[0] cancel
[1] all
[2] Logger at src/Logger.cpp:52
[3] Logger at src/Logger.cpp:52
[4] Logger at src/Logger.cpp:52

3 つのインスタンスすべてがファイル Logger.cpp の 552 行目にあるという事実から、実際には同じメソッドを参照していると推測できます。これはどういう意味ですか?Logger::Logger コンストラクターが誤ってバイナリに 3 回入りましたか、それとも gdb のバグですか?

4

3 に答える 3

0

「info break」を使用して、おそらく同じ行に設定されたブレークポイントを無効にしたり、有効にしたりできます....ただし、step と stepi についても知っておく必要があります (stepi は、ソース レベルではなく、単一のマシン コード命令を実行します。ステップが行うことです)。

また、特定の回数継続してそのブレークポイントを通過するために c # を実行することもできます...つまり、3 回評価されるループ内の 1 つのブレークポイントである場合、c 3 に移動すると、この特定のループを通過します。 ..

于 2009-07-14T03:17:40.380 に答える
0

gccパフォーマンスが向上すると考えられたためにメソッドがインライン化されたか、複数の方法でインスタンス化されたテンプレートで使用されました。どちらのパスでも、実行可能バイナリに複数のバージョンが含まれる可能性があります。

于 2009-05-11T01:25:31.823 に答える