这个问题与如何同时调试qemu代码和qemu机器上的应用程序?有关。虽然我可以在 ddd 的命令窗口中设置 ddd 的参数,但如果我可以从 linux 命令行为 ddd 提供整个参数,那就会很方便。
问题是,如果使用
ddd qemu-system-aarch64 command
启动 ddd,并且我在 ddd 的命令窗口中给出此命令,qemu 程序会理解它。
set args -machine ab21q,gic-version=max,secure=on,virtualization=true -cpu max -device loader,file=spl/u-boot-spl,addr=0x4000000 -m 1G -nographic -device loader,file=../../LinuxDevDrv/linux-5.15.68/arch/arm64/boot/Image,addr=0x80200000 -gdb tcp::1235 -S
但是如果我像这样在 linux 命令 shell 中给出这个 arg 列表,
$ ddd --args ../../QEMU/qemu-6.2.0/build-baremetal/qemu-system-aarch64 -machine ab21q,gic-version=max,secure=on,virtualization=true -cpu max -device loader,file=spl/u-boot-spl,addr=0x4000000 -m 1G -nographic -device loader,file=../../LinuxDevDrv/linux-5.15.68/arch/arm64/boot/Image,addr=0x80200000 -gdb tcp::1235 -S
然后,ddd 在其命令窗口中给了我这个错误。
qemu-system-aarch64: tcp::1235: Unknown protocol 'tcp'
当然
-gdb tcp::1235
是 qemu 的参数,如果我在 ddd 命令窗口中给出它,ddd 会理解它,但是如果我将它与其他参数一起传递给 ddd,qemu 不会理解它。看起来 -gdb
部分被 ddd 拦截,只有 tcp::1235
被传递给 qemu。我该如何解决这个问题??
您可以使用 '--' 来阻止 ddd 处理进一步的参数;之后的所有事情都会交给所谓的“低级调试器”,即 gdb。 '--args' 是一个 gdb 选项,后面的所有内容都是要运行的命令及其参数。所以你需要一个像这样的命令行:
ddd [arguments for ddd] -- [arguments for gdb] --args [qemu binary] [arguments for qemu]
严格区分 gdb 参数和 dd 参数可能是最可靠的;评论中的讨论表明,如果 ddd 在“--”之前找到 gdb 参数,它不会将其放在 gdb 命令行上的正确位置。