c - Valgrind 输出与预期不同(

标签 c valgrind

我正在通过艰难的方式学习 C,我正在开始 section on valgrind

示例输出的摘录如下:

==3082== Use of uninitialised value of size 8 
==3082==    at 0x4E730EB: _itoa_word (_itoa.c:195) 
==3082==    by 0x4E743D8: vfprintf (vfprintf.c:1613) 
==3082==    by 0x4E7E6F9: printf (printf.c:35) 
==3082==    by 0x40052B: main (ex4.c:11) 

虽然我的输出看起来像这样:

==2362== Use of uninitialised value of size 4 
==2362==    at 0x40885CB: _itoa_word (in /lib/libc-2.16.so)
==2362==    by 0x408C13E: vfprintf (in /lib/libc-2.16.so)
==2362==    by 0x4092AE: printf (in /lib/libc-2.16.so)
==2362==    by 0x4061604: (below main) (in /lib/libc-2.16.so) 

如何让我的 Valgrind 输出匹配?我不是很担心第 2-4 行,但我更希望最后一行实际上是对应的(我猜它可能无论如何都是相关的)。


我是这样构建我的 ex4 的:

$ make ex4
cc -Wall -g    ex4.c    -o ex4
** Some warnings here **

然后像这样执行valgrind:

$ valgrind ./ex4

我在 Arch linux、GCC 4.7.1 上运行从源代码构建的 valgrind 3.7.0,因为我有 GLIBC 1.6,所以我修改了我的配置文件并添加了这段代码:

     2.16)
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.16 family" >&5
$as_echo "2.16 family" >&6; }

$as_echo "#define GLIBC_2_16 1" >>confdefs.h

DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
;;

就在 ;; 的下方,它与之前的 2.14) 案例相匹配。

最佳答案

我怀疑您没有安装标准库的调试/符号。

由于库版本不同,输出总是会略有不同,但您应该能够通过调试包获得一些行号。

你可能需要 -O0 来避免 main() 被省略。

关于c - Valgrind 输出与预期不同(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11545570/

相关文章:

javascript - 如何将多维数组从 Javascript 转换为 C?

c - 二维排列练习

c - 从 double 函数返回 void?

c++ - callgrind 有合理的替代品吗?

c - 在 Windows 7 上获取 Valgrind

c - 如何在 Linux 中使用 addr2line 命令?

c++ - Qt delete 适用于 Valgrind 但不能正常执行

c - 当输入是阶数大于 2 的矩阵时,为什么会出现段错误?

c - 使用 `/MT` 未解析的 Visual C 运行时函数

c - C 中的 GeoIP_new API 可能存在内存泄漏