Valgrind给出错误的行号

时间:2012-11-29 06:01:25

标签: c ubuntu valgrind

我目前正在运行Ubuntu Raring Ringtail x86。在全新安装和更新之后,我根据“学习C艰难之路”教程中的说明安装了Valgrind 3.8.1。我可以运行Valgrind,而不是在代码中给出错误的行号,它只会给我这个:

==9300==    by 0x4060714: (below main) (libc-start.c:227)

Full Valgrind报告:http://pastebin.com/1spmkFrU

我确定我正在使用-g标志,并且使用 - track-originins = yes 只会显示错误的函数开始的位置,而不是错误在函数内的位置。 (这是使用 - track http://pastebin.com/ktvY8HEM

的结果

这是我正在尝试使用的makefile和代码:

生成文件:

CFLAGS=-Wall -g

EXECUTABLES=ex1 ex3 ex4

all: $(EXECUTABLES)

clean:
    rm -f $(EXECUTABLES)

代码:

#include <stdio.h>

/*This program is purposefully broken */

int main()
{
    int age = 10;
    int height;

    printf("I am %d years old.\n");
    printf("I am %d inches tall.\n", height);

return 0;
}

2 个答案:

答案 0 :(得分:0)

main()的堆栈分配语义有点奇怪。尝试将错误代码放入另一个函数中,从main()调用它,您可能会得到更有意义的结果。

更重要的是,尝试将-Wall-O添加到CFLAGS。可以在编译时检测未使用的变量和printf()的误用。

答案 1 :(得分:0)

在相同的教程中,这发生在练习8上。即使启用了跟踪,Valgrind也没有发现访问非法地址的行。

似乎错误对于程序来说并不致命,但包括访问非法地址的内存,并不是由Valgrind“固定下来”。 您可以在这里阅读更多相关信息: Excerpt from Valgrind documentation

我猜Valgrind不会让你无法进入记忆中的错误位置,所以我们必须格外谨慎。