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

ARM Ubuntu机器上Valgrind-3.13.0无法生成正确堆栈跟踪求助

解决ARM架构Ubuntu上Valgrind无法显示malloc完整堆栈的问题

问题现象

运行Valgrind分析程序时,泄漏报告仅显示malloc在vgpreload_memcheck-arm64-linux.so中的地址,无法看到调用malloc的完整堆栈:

堆摘要:
退出时仍在使用:2400字节,共6块
总堆内存使用:7次分配,1次释放,分配了3424字节

2400字节(6块)确定丢失,丢失记录1/1
位置:0x4845BFC: malloc (in /usr/lib/valgrind/vgpreload_memcheck-arm64-linux.so)

泄漏摘要:
确定丢失:2400字节,6块
间接丢失:0字节,0块
可能丢失:0字节,0块
仍可访问:0字节,0块
已抑制:0字节,0块

如需统计检测到的和已抑制的错误,请重新运行时添加参数:-v
错误摘要:1个上下文共1个错误(已抑制0个)

解决方法

  • 编译程序时添加调试符号
    编译程序必须加上-g参数保留调试信息,否则Valgrind无法解析程序的函数调用堆栈:

    gcc -g your_program.c -o your_program
    
  • 安装libc的调试符号包
    malloc属于系统libc库,需要安装对应架构的调试包才能让Valgrind解析libc内部的调用链:

    sudo apt install libc6-dbg:arm64
    
  • 使用Valgrind的完整堆栈跟踪参数
    运行Valgrind时添加以下参数,强制生成详细的堆栈信息:

    valgrind --leak-check=full --track-origins=yes --verbose ./your_program
    
    • --leak-check=full:启用完整泄漏检测,显示每个泄漏块的分配堆栈
    • --track-origins=yes:增强堆栈可读性,跟踪未初始化值来源
    • --verbose:输出更多调试信息辅助排查
  • 升级Valgrind到新版本
    Valgrind 3.13.0对ARM64架构的支持存在局限性,建议升级到最新稳定版,可通过源码编译:

    1. 下载最新Valgrind源码包
    2. 解压后执行:
      ./configure --prefix=/usr/local
      make -j$(nproc)
      sudo make install
      

内容的提问来源于stack exchange,提问作者Durgesh kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:15:35