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

如何编译代码并通过Valgrind获取文件及行号信息

让Valgrind输出显示具体文件和行号的配置方法

一、编译阶段添加调试符号

Valgrind需要依赖编译生成的调试符号才能关联到源代码的文件和行号,因此必须在编译时开启调试信息生成:
修改你的构建命令,添加-g编译选项:

make BUILD=TARGET_ CFLAGS="-g"

或者直接在Makefile的编译规则中加入-g参数,确保gcc/clang这类编译器生成包含行号、文件名等调试信息的可执行文件。如果编译时未添加该选项,Valgrind只能识别二进制文件路径(如示例中的/bin/bash),无法定位到具体源代码位置。

二、Valgrind运行命令配置

保持核心检测参数不变,无需额外调整即可解析调试符号:

valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./<你的可执行文件名>

若需要更精准的内存错误根源定位,可额外添加--track-origins=yes参数。

三、调整后的输出示例

添加调试符号后,Valgrind的输出会显示对应的源代码文件和行号,示例如下:

==12345== 80 bytes in 1 blocks are definitely lost in loss record 1 of 4
==12345==    at 0x4004405: malloc (vg_replace_malloc.c:149)
==12345==    by 0x8095A91: xmalloc (memory_utils.c:15)
==12345==    by 0x806AC84: execute_command_internal (main.c:207)
==12345==    by 0x806C72F: execute_command (main.c:312)
==12345==    by 0x805DE1A: reader_loop (main.c:45)
==12345==    by 0x805CEE1: main (main.c:18)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:32:41