2

共有オブジェクト ライブラリを動的にロードする実行可能ファイルがあります。たとえば、foo.so とします。私は foo.so をビルドしません。コードで使用するライブラリとして提供されています。foo.cpp をコンパイルすると、foo.so が得られます。foo.cpp にはアクセスできませんが、foo.so は持っています。実行可能ファイルがこの共有ライブラリ foo.so 内の関数を呼び出すとき (つまり、foo.cpp 内の関数が呼び出されるとき) にブレークポイントを設定したいと考えています。gdbでそうする方法はありますか?私が試してみました

gdb funcname 

しかし、うまくいかないようです。その時点でgdbを壊す方法はありますか?

4

1 に答える 1

3

gdbでそうする方法はありますか?

はい。

私が試してみましたgdb funcname

それはうまくいきません。gdb exenameを実行してから、プロンプトbreak funcnameで実行する必要があります。(gdb)

その時点で、GDBはfuncname(まだ動的にロードされていないため)まだ存在していないことを通知し、遅延ブレークポイントfoo.soを作成するかどうかを尋ねます。答える必要があります。そうすれば、GDBは、新しい共有ライブラリがロードされるたびに、このブレークポイントの設定を再試行します。最終的にこれは成功し、ブレークポイントを(自動的かつサイレントに)設定する必要があります。後で呼び出すと、そのブレークポイントが起動し、GDBが停止します(これはまさにあなたが望むものです)。yesfuncname

于 2012-08-14T05:51:23.403 に答える