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

Valgrind输出显示???而非函数名,如何获取内存泄漏详情?

解决Valgrind调用栈无符号信息的问题

你的问题核心是目标程序/usr/bin/dash没有保留调试符号,导致Valgrind无法把内存地址映射为函数名、代码文件和行号,只能显示地址和???。以下是具体解决方法:

一、优先安装带调试符号的官方包

大部分Linux发行版都提供了带调试符号的软件包,直接安装是最快的方式:

  • Debian/Ubuntu系发行版:
    安装dash的调试包:sudo apt install dash-dbg
    同时建议安装系统库的调试包(很多内存泄漏可能来自libc等系统库):sudo apt install libc6-dbg
  • 安装完成后,重新用你原来的Valgrind命令运行检测,就能看到完整的调用栈信息了。

二、手动编译带调试符号的dash

如果官方没有提供调试包,或者你需要自定义编译版本:

  1. 从GNU或发行版的源码仓库下载dash的源代码;
  2. 编译时添加-g参数开启调试符号:
    ./configure
    make CFLAGS="-g"
    
  3. 直接运行编译生成的本地dash二进制文件进行Valgrind检测,或者替换系统的/usr/bin/dash(替换前建议备份原文件)。

三、Valgrind参数补充说明

你当前使用的--leak-check=full、--show-leak-kinds=all已经是检测内存泄漏的标准有效参数,不需要调整。额外可以添加:

  • --track-origins=yes:追踪未初始化内存的来源,能帮你定位更隐蔽的内存问题,但前提是目标程序有调试符号;
  • 注意不要使用--strip-debug这类会丢弃调试信息的Valgrind参数,默认情况下Valgrind会自动读取程序的符号表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:47:10