質問

私はOSの作成に取り組んでおり、コードをデバッグしようとする問題に遭遇しています。 GDBを使用してBochsのGDBスタブに接続して、カーネルを「リモート」デバッグしています。接続は、カーネルファイルからデバッグシンボルを読み込むように、正常に機能します。正常に配置されたKmain関数のブレークポイントを設定し、デバッガーが正しく壊れます(カーネル内)。ただし、コードを介して「ステップ」または「次へ」することも、GDBが現在の行がどのコードであるかを明らかに決定することもできません。

「ステップ」しようとすると、次のメッセージが表示されます。「現在の関数の境界が見つかりません」。これは、いつでも取得する唯一のエラーメッセージです。

私のコードは-gフラグを使用してGCCでコンパイルされています(GCCオプションを使用して他のタイプのデバッグ情報を試しましたが、機能していません。)GDBマニュアルを調べてみて、回答を検索してみました。 'm完全に困惑しました。どんな助けも素晴らしいでしょう。

ありがとう!

役に立ちましたか?

解決

さて、私はデバッグを機能させましたが、エミュレーターを切り替える必要がありました。私もそれを行うのに問題がありましたが、私はQEMUとGDBを連携させることができました。 GDBをQEMU GDBSERVERに接続するには、次のオプションをQEMUに渡す必要がありました。それを理解するために私を永遠に連れて行ってくれました...デバッグは今完璧に機能します!

他のヒント

グーグルは「これはGDBSERVERに接続したとき、デバッグの下のプロセスがCスタートアップコードを完了していないためです」 http://www.cygwin.com/ml/gdb/2005-03/msg00237.html... http://www.bravegnu.org/gnu-eprog/c-startup.html 組み込みデバイスをコーディングするときのプロセスについて説明しますが、これは役立つでしょうか?

答えを見つけた場合は、問題の解決策も何であるかを知りたいので、ここに投稿してください。

理由はわかりませんが、GDB-Stubを有効にしたBochsは、構成オプションでうるさいと思われます。いくつかのシステムでは、次のオプションはそれを破壊します:-Enable-X86-64、-Enable-VMX

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top