0

2 つの仮想マシンを使用して kgdb をセットアップしましたが、どちらも CentOs 6.4 を使用しています (実際には kgdb ホストはターゲットのクローンです)。リモート ターゲットに正常に接続し、デバッグを開始できます。RAID ドライバ、具体的には raid456.ko をデバッグしたいです。私の問題は、gdb で add-symbol-file コマンドを使用してこの raid456.ko のシンボルをロードした後、いくつかの関数にブレークポイントを設定できることですが、いくつかの関数にブレークポイントを設定できません。たとえば、ops_run_biofill 関数にはブレークポイントを設定できますが、ops_run_biorain 関数には設定できません。どちらも静的関数であり、raid5.c ファイルの一部です。ops_run_biorain にブレークポイントを設定しようとすると、次のように表示されます。

(gdb) b ops_run_biorain

関数「ops_run_biorain」が定義されていません。今後の共有ライブラリのロード時にブレークポイントを保留にしますか? (y または [n])

デバッグできる機能がほとんどないのはなぜですか?

[編集]--------------------- 問題をさらに調査したところ、nm ユーティリティを使用して、特定のシンボル部分の名前と仮想アドレスを見つけることができることがわかりました。オブジェクトファイル。raid456.ko で nm を試してみたところ、nm コマンドの出力に ops_run_biofill 関数が表示されますが、ops_run_biorain は出力されません。これは ops_run_biorain が raid456.ko にないということですか? はいの場合、なぜそれが raid456.ko の一部ではないのですか? ops_run_biorain はマクロ チェックを受けていません。

4

1 に答える 1