如何从 Linux 命令行为 qemu 传递 `-gdb tcp::1234` 参数?

问题描述 投票:0回答:1

这个问题与如何同时调试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。我该如何解决这个问题??

gdb qemu ddd-debugger
1个回答
0
投票

您可以使用 '--' 来阻止 ddd 处理进一步的参数;之后的所有事情都会交给所谓的“低级调试器”,即 gdb。 '--args' 是一个 gdb 选项,后面的所有内容都是要运行的命令及其参数。所以你需要一个像这样的命令行:

ddd [arguments for ddd] -- [arguments for gdb] --args [qemu binary] [arguments for qemu]

严格区分 gdb 参数和 dd 参数可能是最可靠的;评论中的讨论表明,如果 ddd 在“--”之前找到 gdb 参数,它不会将其放在 gdb 命令行上的正确位置。

© www.soinside.com 2019 - 2024. All rights reserved.