我有一个 32 位桌面,运行我的 emacs 副本。
我希望能够调试在非常精简的 qemu 64 位虚拟机上运行的程序。
虚拟机有一个 ssh 端口 24054,它给了我无密码的 root 访问权限,它确实安装了 gdb。
它有我的桌面调用的目录 ~/myco/chip_test 安装为 /9p
因此,如果我在 ~/myco/chip_test 中创建一个 hello.c 文件,然后转到将运行 VM 的 64 位机器,并使用以下命令编译它:
$ gcc -o 你好 -g 你好.c
然后启动虚拟机,在我的 32 位桌面上运行
$ ssh -p 24054 root@anvil 'cd /9p && gdb ./hello'
然后 gdb 在我桌面上的一个窗口中以命令行模式完美运行。
所以现在我当然希望它在 emacs 下运行,因为命令行 gdb 有点难以阅读,我希望看到我的光标在文件中步进,并有带有监视变量的窗口等等。
所以我尝试 Mx gdb 运行 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 的文件,尽管显然发生了一些有趣的事情,因为我可以设置断点,并且所以我想知道是否有一种方法可以让循环中的一个或另一个程序来翻译文件名,以便一切正常。
有什么想法,还是我只是把这一切都搞错了?