私はxv6に基づいているOSクラスをやっていて、それを実行する必要のあるプログラムを書いています。gdbでxv6のユーザコードをデバッグ
私はmake qemu-gdb
でカーネルコードをデバッグできますが、自分のユーザープログラムをデバッグする方法がわかりません。
私はcat
をデバッグしたいと言いますが、どうしたらいいですか?
ありがとう
P.S. xv6タグはありませんか?この質問はここに行かなければならないのでしょうか?
私はxv6に基づいているOSクラスをやっていて、それを実行する必要のあるプログラムを書いています。gdbでxv6のユーザコードをデバッグ
私はmake qemu-gdb
でカーネルコードをデバッグできますが、自分のユーザープログラムをデバッグする方法がわかりません。
私はcat
をデバッグしたいと言いますが、どうしたらいいですか?
ありがとう
P.S. xv6タグはありませんか?この質問はここに行かなければならないのでしょうか?
file cat
、break main
、xv6の最上位ディレクトリからcontinue
':'は必要ではありませんが、動作します! _catこれはGDBで実行されている方法により、ホスト 上のファイルの名前があるので –
は、私はそれを試したとき、私は を行うために必要な – shevski
申し訳ありませんvimの表記 'ファイル_catは、これはメイン continue' を破る ウィンドウを開きます(make qemu-gdbを実行した後、別のウィンドウでgdbカーネルを実行しました)。 –
:
実行デバッグモードでエミュレータ(無X11を想定していない):make qemu-nox-gdb
他の端末では、デバッガを実行するだけです
は、GDBインターフェイスの実行から、例えばmain()
gdb kernel
これは重要です:(gdb) target remote localhost:26000
26000がTCPであるとカーネルシンボルをロードしますポート#1が最後に報告します(これは変わるかもしれません)。ロード(gdb)file user_program
場所ブレークポイント(gdb) break main
を持つユーザEXECと(gdb) continue
等...
'を続行:ファイルcat'、':メインブレイクを'、' run'は何かを得ますか? – shevski
さて、私はそれを試みたと確信していたので、今私は本当に愚かな気がします。しかし今、私は代わりに 'load'を試したかもしれないと思います。ありがとう!私はこれをどこでもオンラインで探して、何人かの人に電子メールを送りましたが、誰も私にこれを教えてもらえません...(回答と私は受け入れます) –