2016-04-19 7 views
0

タイトルはすべてそうだと思います!! :)デバッグセッション中にリモートKGDBとローカルDDBを切り替える

リモートカーネルのデバッグ中にgdbとddbを切り替える方法があるかどうかを知りたいと思います。

私はすでにgdb(またはむしろkgdb)プロンプトを表示しています。ここから、デバッグされたマシンのローカルddbに切り替えるにはどうすればいいですか?

私のカーネル設定ファイルはすでにoptions BREAK_TO_DEBUGGERが含まれていると私はGDBとDDBの両方が別名設定している:developer's handbook 1として options GDB options DDB

、「あなたはGDBを入力するたびに、モードは、リモートGDBとローカルDDBの間で切り替えられますあなたのホストGDBはターゲットカーネルを制御するようになりました: "

これで、gdbプロンプトに「gdb」と入力してみました。面白い:D)期待通りに、それは認識されないコマンドでした。明らかに、このコマンドはddbプロンプトに入力されているはずです。しかし、私の質問は、シリアルポート(仮想マシンだが)が別のマシンのKGDBにリモートで接続されている実行中のマシンから、どのようにddbに落とすのだろうか?リモートのGDBがリッスンしているときに、sysctl debug.kdb.enter=1を使用してパニックを強制すると、リモートのKGDBに落ちます。しかし、リッスンしていないときは、システムが停止します。

私が欲しいのは、ローカルマシンにddbを入力することです。それを使っていくつかのデバッグを行います。リモートのKGDBにドロップして、KGDBを使って行うのが一番良いことを確認してから、完了したらローカルのDDBに戻ってください。

これを行う方法はありますか?はいの場合はお知らせください

答えて

0

KDBにはDDB & KDBバックエンドが含まれていますが、利用可能な場合は多くの条件があります。バックエンドが使用可能かどうかをチェックするには、sysctl debug.kdb.availableおよびdebug.kdb.current(sys/kern/subr_kdb.c)をチェックします。両方のバックエンドが使用可能な場合、debug.kdb.availableには "ddb gdb"が含まれている必要があります。

バックエンド(gdb/ddb)を切り替える方法は、まずddbを入力してから、gdbを呼び出してデバッグすることです。その後、gdbを終了してddbに戻ります(実際には新しいトラップが発生しますが、Ctrl + Cが必要です)。これは、パニックの前に、debug.kdb.currentを "ddb"に設定する必要があることを意味します。

私はそれが役に立ちそうです。

+0

'のsysctl debug.kdb.available'が' gdb' DDBを与える 'のsysctl debug.kdb.current'が' gdb' を与える私が(GDBがアクティブであった場合)DDBプロンプトでCTRL-Cを試してみましたコントロールをGDBに戻しますが、無駄にしません。 私は 'debug.kdb.current'で遊んでいれば私の目標を達成できますか? – HighOnMeat

+0

わかりません。 1つのバックエンドが時間内に存在するはずです。 DDBからGDBへの移行は「gdb」コマンドです。移行はgdbを終了することです。 –

+0

私は現在のバックエンドを 'sysctl debug.kdb.current = ddb'でddbに変更しました。それから私はパニックを引き起こし、私はddbプロンプトにいました。ここで 'gdb'と打つと、マシンはクライアントマシンのgdbバックエンドに接続されます。 gdbを終了すると、デバッグされたマシンのシェルプロンプトに戻り、ddbには戻りません。これはどうすればいいのでしょうか? – HighOnMeat

関連する問題