2011-12-15 8 views
9

一般的なgdb/gdbserverに関する質問があります。私は、ホスト上でgdbとリモートターゲット上でgdbserverを使用してアームの組み込みアプリケーションをデバッグしようとしています。私は、メインの冒頭でコードの行を進めることができます。しかし、gdb(またはgdbserver)は、共有ライブラリ関数の呼び出し後に失われているようです。コールの後にブレークポイントを設定して使用しても、ブレークポイントには決して打たれません。私は共有ライブラリにシンボルがなく、実際にそれらに入るのを気にしないことを知っています。シンボルを共有ライブラリに入れなくても、あるいは少なくとも次のブレークポイントまで続けていても、gdbのライブラリ呼び出しを正常にステップオーバーすることはできませんか?あるいは、これは異なるタイプの問題を示していますか?gdb/gdbserverでライブラリ呼び出しを実行する

+0


あなたはそれがブレークポイントで命令(複数可)を実行していることを示し、他のソースからの証拠を持っていますか?高レベルのソースを見るのではなく、逆アセンブリを見て、 'gdb'の解釈の一部を見てください。 –

+0

問題は特定の共有オブジェクトで発生するのですか、または問題を説明する簡単な「テストケース」を作成できますか? –

+0

長い応答時間は申し訳ありません。埋め込みデバイスでコードが正しく実行されています。それは紛失しているgdbまたはgdbserverです。ライブラリ関数に呼び出しが行われると、プログラム内でその場所を追跡できなくなり、制御を取り戻すことができなくなります。私はそれが必ずしもすべてのライブラリ関数であるとは考えていません。なぜなら、open()というヒットしてから実行の早い段階で過ぎ去ることができないからです。 – Jim

答えて

1

シンボルではなくアドレスによるブレークポイントがより信頼できる場合があります。

これを試してみてください:

 
(gdb) x/i my_func 
0x12345678 <my_func> ... 
(gdb) break *0x12345678 
関連する問題