1

私は32ビットデスクトップを持っており、そこでemacsのコピーが実行されています。

非常に簡素化されたqemu64ビット仮想マシンで実行されているプログラムをデバッグできるようにしたいと思います。

仮想マシンにはsshポート24054があり、パスワードなしのrootアクセスが可能であり、gdbがインストールされています。

そしてそれは私のデスクトップが呼び出すディレクトリを持っています〜/ myco/chip_testは/9pとしてマウントされています

したがって、〜/ myco / chip_testにhello.cファイルを作成する場合は、VMが実行される64ビットマシンに移動し、次のコマンドでコンパイルします。

$ gcc -o hello -g hello.c

次に、仮想マシンを起動し、32ビットデスクトップで実行します

$ ssh -p 24054 root @ anvil'cd / 9p && gdb ./hello'

次に、gdbは、デスクトップのウィンドウでコマンドラインモードで完全に実行されます。

コマンドラインgdbは少し読みにくいので、もちろん今はemacsで実行したいと思います。カーソルがファイルをステップスルーし、監視変数などを備えたウィンドウが必要です。

だから私はMxgdbRun gdb(このように)を試してみます:ssh -p 24054 root @ anvil cd / 9p && gdb --annotate = 3 ./hello

そして、emacsでデバッガーウィンドウが表示され、すべてが正しく表示されます。実際、同じファイルであるローカルemacsの〜/ myco / chip_test / hello.cファイルのフリンジをクリックすることで、ブレークポイントを設定および削除することもできます。 gdbが/9p/hello.cと見なすものと同じですが、移動するカーソルが表示されないか、移動しないため、全体がかなり役に立たなくなります。

したがって、emacs / Gudは、〜/ myco / chip_test / hello.cがデバッガーが/9p/hello.cであると見なすファイルであることを完全には認識していないと思いますが、ブレークポイントを設定できるため、明らかに何か面白いことが起こっています。だから私は、すべてがうまく機能するようにファイル名を翻訳するためにループ内に1つまたは別のプログラムを取得する方法があるのだろうかと思います。

何かアイデアがありますか、それとも私はこれについてすべて間違っていますか?

4

1 に答える 1

1

どちらかをすれば、はるかに良い結果が得られます

  • VMにマウント/home/<user>/myco/chip_testする/home/<user>/myco/chip_test(ソースパスが完全に一致するようにする)、または
  • VMで実行gdbserverし、ローカルGDBをVMに接続します。
于 2011-10-16T20:52:07.570 に答える