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架构的支持存在局限性,建议升级到最新稳定版,可通过源码编译:- 下载最新Valgrind源码包
- 解压后执行:
./configure --prefix=/usr/local make -j$(nproc) sudo make install
内容的提问来源于stack exchange,提问作者Durgesh kumar
相关产品推荐
相关产品推荐

