2

Linux カーネル モジュールをデバッグしています。それはデッドロックを引き起こし、私はその方法を理解しようとしています。vmware+を使用してgdbいます。アイデアは、関数をフックし、バックトレースをファイルに記録することです。私は次のことを試しています:

(gdb) br _raw_spin_lock
Breakpoint 5 at 0xffffffff815eb700: file kernel/spinlock.c, line 136.
(gdb) commands 5
Type commands for breakpoint(s) 5, one per line.
End with a line saying just "end".
>silent
>bt
>continue
>end

しかし、continueここでは機能しません。私はそれを置き換えるbtecho 1動作します。関数が呼び出されるたびに情報をログに記録する方法はありますか?

ありがとうございました。

4

2 に答える 2

1

ほとんどの場合、gdb ページネーション プロンプトが表示されます。 https://sourceware.org/gdb/onlinedocs/gdb/Screen-Size.html

ブレークポイントを設定する前にこれを実行します

set height 0
于 2016-09-15T07:03:56.633 に答える
0

なぜうまくいかないのか、あなたは言いません。正確に何がうまくいかないのですか?

通常、この種のことはうまく機能します。ブレークポイントのコマンドに「続行」を入れることは、私が何年もの間日常的に行ってきたことです。問題がないわけではありません (「次へ」の妨げになります) が、ロギングなどを行っているだけであれば、うまく機能します。

「bt」がエラーで失敗していると推測できます。これにより、コマンドが中止され、inferior がブレークポイントで停止すると思います。問題は、正確にはどのようなエラー メッセージが表示されるかということです。または、ページネーションにヒットしている可能性があります。または、私が考えていなかった他のことかもしれません:-)

エラーの場合、考えられるオプションの 1 つは、バックトレースを制限することです。

于 2013-10-11T04:10:03.930 に答える