【问题标题】:Need help in reading callgrind output在阅读 callgrind 输出时需要帮助
【发布时间】:2011-02-17 02:35:26
【问题描述】:

我已经像这样使用我的应用程序运行 callgrind:

valgrind --tool=callgrind MyApplication

然后调用:

callgrind_annotate --auto=yes ./callgrind.out.2489

我看到如下输出:

 768,097,560  PROGRAM TOTALS

--------------------------------------------------------------------------------
       Ir  file:function
--------------------------------------------------------------------------------
18,624,794  /build/buildd/eglibc-2.11.1/elf/dl-lookup.c:do_lookup_x
[/lib/ld-2.11.1.so]
18,149,492  /src/js/src/jsgc.cpp:JS_CallTracer'2
[/src/firefox-debug-objdir/js/src/libmozjs.so]
16,328,897 /src/layout/style/nsCSSDataBlock.cpp:nsCSSExpandedDataBlock::DoAssertInitialState()
[/src/firefox-debug-objdir/toolkit/library/libxul.so]
13,376,634  /build/buildd/eglibc-2.11.1/nptl/pthread_getspecific.c:pthread_getspecific
[/lib/libpthread-2.11.1.so]
13,005,623  /build/buildd/eglibc-2.11.1/malloc/malloc.c:_int_malloc
[/lib/libc-2.11.1.so]
10,404,453  ???:0x0000000000009190 [/usr/lib/libpangocairo-1.0.so.0.2800.0]
10,358,646  /src/xpcom/io/nsFastLoadFile.cpp:NS_AccumulateFastLoadChecksum(unsigned
int*, unsigned char const*, unsigned int, int)
[/src/firefox-debug-objdir/toolkit/library/libxul.so]
 8,543,634  /src/js/src/jsscan.cpp:js_GetToken
[/src/firefox-debug-objdir/js/src/libmozjs.so]
 7,451,273  /src/xpcom/typelib/xpt/src/xpt_arena.c:XPT_ArenaMalloc
[/src/firefox-debug-objdir/toolkit/library/libxul.so]
 7,335,131  ???:g_type_check_instance_is_a [/usr/lib/libgobject-2.0.so.0.2400.0]

我有几个问题:

  1. 右边的数字是什么意思?这是否意味着它在调用右边的函数时累积了这么长时间?我如何知道该函数被调用了多少次?这是否包括调用该函数所调用的函数所花费的时间?

  2. ??? 一致是什么意思?例如???:0x0000000000009190 [/usr/lib/libpangocairo-1.0.so.0.2800.0]

【问题讨论】:

    标签: c++ valgrind


    【解决方案1】:

    正如 Let_Me_Be 已经回答的那样,KCachegrind 是首选方法。还要确保dot 命令在您的系统上可用,以便使用它生成图表。还有callgrind_annotate工具,可以在命令行层面做一些基本的处理。

    关于您的第二个问题,这些是库内的调用,没有调试信息。通常它不是那么有趣,但如果你真的需要这些信息,你应该使用调试符号(优化标志,因为你正在分析)自己编译库。

    【讨论】:

    • 但是我要分析的程序是一个 gtk 应用程序,而 KCachegrind 是一个 KDE 应用程序。我能做什么?
    • 运行 KCachegrind 不需要 KDE。拥有 kdelibs 就足够了,而且它可能已经安装在您的系统上。此外,KCachegrind 不是用于分析 KDE 应用程序,它可以读取任何 callgrind 输出。
    【解决方案2】:

    使用 KCachegrind。破译文本输出是没有意义的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多