问题标签 [callgrind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
387 浏览

valgrind - callgrind 到底收集了什么

是采样还是记录执行的每条指令?

它只是捕获执行函数还是也有行号?

0 投票
2 回答
624 浏览

profiling - 我应该使用什么分析器来测量在此函数中花费的 _real_ 时间(包括等待系统调用),而不是 _CPU_ one

该应用程序不计算事物,但执行 i/o、读取文件、使用网络。我希望分析器显示它。

我期望像 callgrind 这样的东西,每个问题都会调用 clock_gettime 。

或者像 oprofile 那样中断我的应用程序(当它正在睡眠或等待套接字/文件/任何东西时)以查看它在做什么。

我希望像“read”、“connect”、“nanosleep”、“send”,尤其是“fsync”(以及他们所有的调用者)这样的东西是粗体的(而不是像执行计算的字符串或数字函数这样的东西)。

平台:GNU/Linux @ i386

0 投票
1 回答
1366 浏览

profiling - Callgrind main() 包含成本远小于 100%

我分析了一些在 Linux 上运行的非常简单的 C++ 程序。所有这些的 main() 的包含成本远不是 100%,大约是 3.83%。我正确使用 callgrind 吗?我在下面粘贴了callgrind_annotatewith的输出。--inclusive=yes

该程序称为堆,它进行简单的堆排序。我使用的命令是

然后,我输入

输出:

0 投票
6 回答
1979 浏览

c++ - 在 C++ 中记录代码执行

在多次使用gprofcallgrind 之后,我得出了一个(显而易见的)结论,即在处理大型(如加载整辆车的 CAD 程序)程序时,我无法有效地使用它们。我在想也许,我可以使用一些 C/C++ MACRO魔法,并以某种方式构建一个简单(但很好)的日志记录机制。例如,可以使用以下宏调用函数:

我们可以在函数调用之前和之后添加一些时钟/计时的东西,这样每个用 CALL_FUN 调用的函数都会被计时,例如

变量 t0、t1 可以在全局日志记录对象中找到。该日志记录对象还可以保存通过CALL_FUN调用的每个函数的调用图。之后,可以将该对象写入(特定格式的)文件中,并从其他程序中解析。

所以我的(第一个)问题来了:你觉得这种方法容易处理吗?如果是,如何增强它,如果不是,您能否提出一种更好的方法来测量时间和记录调用图?

一位同事提出了另一种解决此问题的方法,即用特定的注释注释每个函数(我们关心记录)。然后,在 make 过程中,必须运行一个特殊的预处理器,解析每个源文件,为我们要记录的每个函数添加日志逻辑,使用新添加的(解析)代码创建一个新的源文件,然后构建该代码。我想到处阅读 CALL_FUN... 宏(我的建议)并不是最好的方法,他的方法可以解决这个问题。那么您对这种方法有何看法?

PS:我对C/C++ MACROs的陷阱不是很熟悉,所以如果可以用其他方法开发,请说出来。

谢谢你。

0 投票
1 回答
1355 浏览

linux - 如何在 Centos Linux 5.5 上使用 callgrind

我正在尝试使用 callgrind 分析器来分析我的 C++ 程序。我在 Intel 32 位处理器上的 Linux Centos 版本 5.5 上使用 Valgrind 版本 3.6,1。当我尝试分析我的程序时,我不断收到以下错误(如下所示)。我已经使用过 Linux gprof,但它没有提供任何有用的分析信息。请告诉我我做错了什么或者我应该使用什么解决方法。谢谢

valgrind --tool=callgrind --dump-instr=yes --simulate-cache-yes --collect-jumps=yes ./MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc /home/frankc/DQTTest5/MatchUpTest/TestData -版本 15,

==25558== Callgrind,一个调用图生成缓存分析器,==25558== 版权所有 (C) 2002-2010,以及 Josef Weidendorfer 等人的 GNU GPL'd,==25558== 使用 Valgrind-3.6 .1 和 LibVEX;使用 -h 重新运行以获得版权信息,==25558== 命令:./MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc /home/frankc/DQTTest5/MatchUpTest/TestData -version 15, ==25558==, ==25558== 对于交互控制,运行'callgrind_control -h'., memcpy, BB# 486126,

Callgrind: jumps.c:164 (new_jcc): Assertion '(0 <= jmp) && (jmp <= from->bb->cjmp_count)' failed., ==25558== at 0x3801E4C8: report_and_quit (m_libcassert.c: 193), ==25558== by 0x3801E69C: vgPlain_assert_fail (m_libcassert.c:267), ==25558== by 0x3800FCD9: vgCallgrind_get_jcc (jumps.c:164), ==25558== by 0x38003534: vgCallgrind_push :217), ==25558== by 0x38001FDB: vgCallgrind_setup_bbcc (bbcc.c:844), ==25558== by 0x629B9E93: ???,

调度状态:, running_tid=1,

线程 1:状态 = VgTs_Runnable,==25558== 位于 0xB64A30:memcpy(在 /lib/libc-2.5.so 中),==25558== 由 0xC845D3:__pthread_initialize_minimal(在 /lib/libpthread-2.5.so 中),= =25558== 由 0xC84217: ??? (在 /lib/libpthread-2.5.so 中),==25558== 由 0xC83DA7: ??? (在 /lib/libpthread-2.5.so 中),==25558== 通过 0xAE2162:call_init(在 /lib/ld-2.5.so 中),==25558== 通过 0xAE228F:_dl_init(在 /lib/ld-2.5 .so), ==25558== 由 0xAD484E: ??? (在 /lib/ld-2.5.so 中),

注意:另请参阅源代码分发中的常见问题解答。它包含几个常见问题的解决方法。特别是,如果 Valgrind 在识别程序中的问题之后中止或崩溃,则很有可能修复这些问题将阻止 Valgrind 中止或者,崩溃,特别是如果它发生在 m_mallocfree.c. 中,

如果这没有帮助,请将此错误报告给:www.valgrind.org,

在错误报告中,发送上述所有文本、valgrind、版本以及您使用的操作系统和版本。谢谢。

0 投票
1 回答
606 浏览

c - 使用 callgrind 找出最密集的函数

我刚刚在一个文件上使用了 callgrind,它给了我一个 callgrind 输出。然后我使用 callgrind_annotate 以更易读的形式获得结果,并将其输出到文本文件中。我应该如何破译这个新文件以找出最密集的功能?左边的 Ir 列是什么?Ir 代表什么?

0 投票
1 回答
1527 浏览

qt - How do I let Callgrind access my Qt project's source code?

I built a Qt project in Debug mode with Qt Creator, ran Callgrind to generate profiling data and tried loading it into Cachegrind. I noticed that I only see profiling information for Qt classes, so I figured I must have forgotten to turn on a crucial flag.

Qt Creator's qmake command looks like this:

Sample compile output for one file:

The -g flag is there, so debug information should be available. I verified this by running gdb on the executable and trying to look at some random source code with l.

The Callgrind command I used was:

What am I missing here?

0 投票
1 回答
2315 浏览

linux - 是否有工具可以检查两个 callgrind/valgrind 配置文件的差异?

我试图了解在使用不同选项运行时程序的性能如何变化——我想解释一下 1.8 的因数。我一直在使用 [valgrind] 的callgrind工具进行分析,并使用kcachegrind来可视化结果。但我真的很想看看差异。我找到了该cg_diff程序,但它不适用于 callgrind 配置文件,只能用于 cachegrind 配置文件,这些配置文件对我来说太贵了,无法收集。 有人知道用于可视化两个配置文件之间差异的工具吗?

0 投票
0 回答
1157 浏览

valgrind - 如何使用 Callgrind 生成多进程应用程序的简单调用图?

我对 Valgrind Callgrind 有疑问。

我需要生成一个应用程序的调用图,但是这个应用程序启动了几个进程。我使用了 Valgrind 的 --trace-children=yes 选项,但这会生成几个不同的 callgrind 输出文件。

有没有办法将这些文件组合在一起只有一个调用图?即使是组合多个文件的工具也是完美的,但我什么也没找到。

谢谢

0 投票
2 回答
2178 浏览

c++ - 在不重新编译主程序的情况下分析共享对象

我目前正在开发一个用于加载到 PostgreSQL 中的共享库(作为 C 语言函数,请参见此处)。现在我想在不重新编译 PostgreSQL 本身的情况下分析这个库中的函数。

我尝试使用 callgrind

这为我提供了 PostgreSQL 本身的分析信息,但无法记录我感兴趣的共享库。

我也试过sprof,但我不知道如何让那个工作。

任何想法都会受到高度评价。

PS:请不要建议只是在调试器中暂停应用程序。由于函数运行时间低于 0.01 秒,我需要更详细的结果。