【问题标题】:wsl2, gdb and cross-debug 32bit i386 - failing to map addresses to symbols ( in ?? () )wsl2、gdb 和交叉调试 32 位 i386 - 无法将地址映射到符号(在 ?? () 中)
【发布时间】: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


    【解决方案1】:

    qemu-i386 的问题困扰着我,所以我决定尝试用 -m32 标志编译一个简单的 .c 来检查它是否也会触发通过 qemu 运行,但由于我缺少 gcc-multilib 而出现错误,所以我安装了它.

    启动 buildt 二进制文件,发现它没有通过 qemu-i386 运行。 再次启动我的原始应用程序,这次它也没有通过 qemu 启动。 启动 gdb-multiarch,加载 bin 并附加到进程,现在突然一切正常,得到了一个很好的正确回溯!

    【讨论】:

    • 重启后 qemu 似乎再次被调用,无论是简单的 -m32 main.c 测试还是原始应用程序。
    • strace 显示 readlink("/proc/self/exe", "/usr/bin/qemu-i386", 4096) = 18 搜索并发现最近的 Docker Desktop 存在问题:github.com/docker/for-win/issues/10594禁用 Docker Desktop,它又开始工作了。 DD 3.2.2 说它已经解决了这个问题,稍后会尝试
    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2016-10-11
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多