【问题标题】:How to make Valgrind log all allocations?如何让 Valgrind 记录所有分配?
【发布时间】:2015-05-28 16:17:15
【问题描述】:

我想让 Valgrind 记录分配,即使没有发现内存错误。如何才能做到这一点?

【问题讨论】:

    标签: c++ c valgrind


    【解决方案1】:

    您可以为此使用Massif(一个 valgrind 工具)。手动链接很容易理解,但为了将来参考,以下是如何使用它,直接来自手册:

    valgrind --tool=massif prog
    

    这将生成一个您可以使用ms_print 分析的文件。文件名将是massif.out.<numbers>。只需使用ms_print 即可获得不错的输出:

    ms_print massif.out.12345
    

    您要查找的内容可以在ms_print 的输出末尾找到。对于这个示例程序(他们在手册中显示的程序):

    #include <stdlib.h>
    
    void g(void)
    {
        malloc(4000);
    }
    
    void f(void)
    {
        malloc(2000);
            g();
    }
    
    int main(void)
    {
        int i;
        int* a[10];
    
        for (i = 0; i < 10; i++) {
            a[i] = malloc(1000);
        }
    
        f();
    
        g();
    
        for (i = 0; i < 10; i++) {
            free(a[i]);
        }
    
        return 0;
    }
    

    我们可以看到谁分配了什么:

    ->79.81% (8,000B) 0x400589: g (in /home/filipe/dev/a.out)
    | ->39.90% (4,000B) 0x40059E: f (in /home/filipe/dev/a.out)
    | | ->39.90% (4,000B) 0x4005D7: main (in /home/filipe/dev/a.out)
    | |   
    | ->39.90% (4,000B) 0x4005DC: main (in /home/filipe/dev/a.out)
    |   
    ->19.95% (2,000B) 0x400599: f (in /home/filipe/dev/a.out)
    | ->19.95% (2,000B) 0x4005D7: main (in /home/filipe/dev/a.out)
    |   
    ->00.00% (0B) in 1+ places, all below ms_print's threshold (01.00%)
    

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2022-11-21
      • 2013-11-11
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多