Linux命令行下如何通过ddd向QEMU传递-gdb参数?
问题:通过ddd命令行传递QEMU参数时
-gdb tcp::1235解析异常 问题场景
在ddd命令窗口内执行
set args设置参数,QEMU可正常识别所有参数,包括-gdb tcp::1235: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通过
ddd --args传递完整参数时,QEMU报错:
执行命令: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报错信息:
qemu-system-aarch64: tcp::1235: Unknown protocol 'tcp'
问题原因
-gdb是gdb(ddd基于gdb)的命令行选项,当通过ddd --args传递参数时,gdb会将-gdb识别为自身的选项,而非传递给QEMU的参数,导致仅把tcp::1235传给QEMU,引发解析错误。
解决方法
使用--分隔ddd自身参数与目标程序(QEMU)的参数,明确告知gdb/ddd:--之后的所有参数都直接传递给QEMU,不进行解析。修正后的命令如下:
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
内容的提问来源于stack exchange,提问作者Chan Kim
相关产品推荐
相关产品推荐

