【发布时间】:2021-03-24 09:24:55
【问题描述】:
我在尝试在我的 WSL2 主机上调试交叉编译的二进制文件时遇到问题,并且最终只能得到地址在 ?? 中的回溯。 (),欢迎任何关于验证和更改内容的提示!
file mybin 显示:
ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接,解释器 /lib/ld-linux.so.2,适用于 GNU/Linux 2.6.32,BuildID[sha1]=... , 带有 debug_info,未剥离
应用程序通过 qemu-i386 在 WSL2 中启动(基于 ps 的输出) 注意:我对此有点疑惑,因为在我使用 vm-ware 和 ubuntu 18.04 的上一个开发环境中,我没有看到使用了 qemu-i386,但基于 WSL2 关于 32 位应用程序支持的问题(指 qemu 和 binfmt)并没有考虑更多解决它。
我正在运行 gdb-multiarch (GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2)
使用info functions <a_regex> 加载可执行文件并列出符号工作正常 但是在附加和断开时,我会得到这样的 bt(注意下面的输出取自 VSCode,启用了一些日志记录标志,因此 - exec bt 的例子):
-exec bt
1: (777701) <-1183-interpreter-exec console "bt"
1: (777704) ->~"#0 0x000000000047a4ea in ?? ()\n"
1: (777707) ->~"#1 0x00007ffd2dcdb1c0 in ?? ()\n"
1: (777709) ->~"#2 0x0000000000467efc in ?? ()\n"
1: (777711) ->~"#3 0x0000000000000000 in ?? ()\n"
注意:附加时我收到以下警告:
警告:所选架构 i386 与报告的目标架构 i386:x86-64 不兼容
gdb 接受将架构设置为 i386:x86-64 但没有区别
设置断点会报如下错误:
1: (40020) ->&"Cannot insert breakpoint 1.\n"
1: (40020) ->&"Cannot access memory at address 0xbce346f\n"
1: (40020) ->&"\n"
1: (40023) ->^error,msg="Command aborted."
更新:已解决 以为安装 gcc-multilib 解决了它,但问题似乎更可能是由于 Docker Desktop 中的一个错误,该错误已在 v3.2.2 中修复。请参阅下面我自己的答案中的描述。
【问题讨论】:
标签: c++ gdb cross-compiling qemu wsl-2