2012-09-01 10 views
5

私は、実行可能ファイルの多くの場所に散在している第3の部分ライブラリ関数呼び出しを持っています。私の実行ファイルはデバッグシンボルを使ってビルドされていますが、サードパーティのライブラリにはデバッグシンボルがありません。そのため、関数にブレークポイントを置くことはできません。ライブラリ関数が呼び出されるたびにブレークポイントを設定して呼び出しスタックを調べたいと思います。 実行可能ファイル内のライブラリ関数呼び出しのすべての呼び出しでブレークポイントを設定する方法を教えてください。関数のすべての呼び出しに対してgdbでブレークポイントを設定するにはどうすればよいですか?

+0

リンカは、デバッグシンボルがなくても関数の名前 - >アドレスマッピングを知っている必要があると思われるので、なぜブレークポイントを置くことができないのかわかりません。ブレークポイントを配置しようとした後にロードされた共有ライブラリにないと確信していますか? –

答えて

4

私は唯一の方法であることを考える:

  • あなたのコード内で、この関数のいずれかの呼び出しを見つけます。
  • その行にブレークポイントを作成します。
  • デバッガを実行して停止します。
  • 最初の関数命令を取得するには、nextiを入力します。
  • 現在のeipを取得します。このeipは、その関数の先頭を指します。
  • eipが指すアドレスに新しいブレークポイントを作成します。
関連する問題