You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM64嵌入式Linux下,如何调试指定动态加载器的32位程序?

调试ARM64设备上通过ld-linux-armhf.so.3启动的32位ARM程序

目标端正确启动调试的命令

无需嵌套调用ld-linux-armhf.so.3启动gdbserver,直接用32位gdbserver加载目标程序即可,同时指定动态库路径:

# 设置32位程序的动态库搜索路径
export LD_LIBRARY_PATH=/customfolder/lib32
# 启动32位gdbserver,绑定主机端口并仅调试一次
/customfolder/bin/gdbserver --once <主机IP>:10010 ./TestGDB32

若必须手动通过ld-linux-armhf.so.3启动程序(比如环境变量无法生效),可让gdbserver直接执行动态加载器并传递程序参数:

/customfolder/bin/gdbserver --once <主机IP>:10010 /customfolder/lib32/ld-linux-armhf.so.3 --library-path /customfolder/lib32 ./TestGDB32

主机端gdb配置与调试步骤

  • 启动支持多架构的gdb:
    gdb-multiarch
    
  • 在gdb中指定目标架构为32位ARM:
    set architecture arm
    
  • 加载本地TestGDB32的符号表(确保本地有带调试信息的程序版本):
    file ./TestGDB32
    
  • 连接到目标设备的gdbserver:
    target remote <目标设备IP>:10010
    
  • 执行常规调试操作:
    break main  # 在main函数设断点
    continue    # 继续执行
    list        # 查看代码
    bt          # 查看调用栈
    

原命令失败的原因

你之前的命令通过ld-linux-armhf.so.3启动gdbserver,再让gdbserver启动另一个ld-linux-armhf.so.3进程运行TestGDB32,导致gdb初始附着的是gdbserver进程而非目标程序进程,进而出现符号加载失败、栈信息错乱的问题。直接用32位gdbserver加载目标程序(或动态加载器+程序参数),能让gdb直接关联到正确的目标进程。

内容的提问来源于stack exchange,提问作者Davide Benetti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:55:21