问题标签 [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.
c++ - 如何确定 valgrind/callgrind 杀死进程的原因
我已经为我正在使用的数据库基础架构编写了一个多线程压力测试,并且我正在尝试使用 callgrind 对其进行分析。该程序在 valgrind 之外完美执行并提供预期的结果。
但是,当在valgrind --tool=callgrind
程序下运行它时,它会执行很短的时间,然后停止,valgrind 会报告Killed
它最后一次输出到标准输出。
有没有办法让我确定为什么 valgrind 杀死了我的任务?
在遵循 phd 的建议后:它确实会被杀死valgrind --tool=none
,但是,我不完全确定如何分析我收到的消息,我的线程中似乎有很多sigvgkill
信号。第一个例子在这里:
c++ - 如何分析 C/C++ 应用程序中内存访问所花费的时间?
一个函数在应用程序中花费的总时间可以大致分为两个部分:
- 实际计算所花费的时间 (Tcomp)
- 内存访问所花费的时间 (Tmem)
通常,分析器提供函数花费的总时间的估计。是否可以根据上述两个组件(Tcomp 和 Tmem)估算所花费的时间?
c++ - 如何从命令行在 OSX 上的 callgrind 输出中获取有意义的函数名称?
目标:我希望能够分析 callgrind(以及后来的 cachegrind)的输出,并希望在使用 callgrind_annotate CLI 时看到有意义的变量名称。
先前研究:我知道 Valgrind 中的 dsym 标志(http://valgrind.org/docs/manual/manual-core.html),并且相信我了解调试符号在 osx 上的工作原理(LLDB 未显示源代码)。我在这个网站上看到的关于这个问题的少数提及要么没有得到答复,要么是没有包含 -g 标志的情况。
理论(可能是错误的......):基于 valgrind 输出中的“dym =”行,我想知道 valgrind 是否正在努力寻找 dsym 目录的路径。
我能给你什么数据?
给定以下源代码:
使用了以下命令行指令:
nm -pa 位用于确保存在调试映射信息。我还在 dSYM 文件夹上运行了 dwarfdump 以确保存在调试信息。我看到“没有为 badprime.cpp 收集信息”这一行作为注释命令的输出。
编译器信息:
瓦尔格林信息:
valgrind 的初始详细输出:
callgrind_annotate 输出:
我将非常感谢可以提供的任何帮助。
profiling - kcachegrind 无法打开 callgrind 文件
我正在使用 callgrind 来分析一小段代码。Callgrind 输出文件生成良好,它们的内容看起来不错,但我无法使用 kcachegrind 打开它们:我收到以下错误消息:
无法打开文件“callgrind.out.4953”。检查它是否存在并且您有足够的权限来阅读它。
我对它们所在的文件和目录拥有所有权限,但有同样的问题。此外,它还可以与同一工作区中的其他文件夹中的其他项目一起使用。我还指出,在这两种情况下,进程都会正确终止。
multithreading - 使用 vagrind 使用调用图分析函数之间的数据依赖关系
我正在尝试为多核 ARM 处理器进行多线程编程。我使用 valgrind 进行分析。我可以从主函数下的函数调用调用图中看到。如何解释函数之间的数据依赖关系?我的两个函数是从主函数分支出来的,我认为这意味着它们之间没有数据依赖关系并且可以并行运行,但事实并非如此。有人可以举个例子或在哪里知道吗?
c++ - 在 callgrind 中调整分辨率
抱歉,我无法创建一个最小的完整示例,因为该问题仅发生在相对较大的程序中,而且我不确定这甚至是一个“错误”本身,而不是对 callgrind 分析应该完成的误解。
我有一个大程序,它的运行时间被分成大约 50 50 成 2 个连续的部分。第一部分主要是文件读取,第二部分主要是计算。
我期望的函数调用顺序如下:
调用范围,被调用者
主要 Part1_main
Part1_main Part1_main_subfunction_1
Part1_main Part1_main_subfunction_2
Part1_main Part1_main_subfunction_3
主要 Part2_main
Part2_main Part2_main_subfunction_1
Part2_main Part2_main_subfunction_2
..
..
当我在代码上运行 callgrind (然后在 osx 上的 kcachegrind 中查看结果)时,我得到了一些关于函数调用的结果,这些结果与您所期望的大致相同,除了一件事:第二部分中没有函数调用的解析:配置文件输出在质量上与
函数,Pct_time,Self_time
Part1_main 50 4
Part2_main 50 50
Part1_main_subfunction_1 20 4
Part1_main_subfunction_2 15 5
..
..
..
第二个功能的自我时间非常高的解释是什么?分析器似乎认为它没有调用任何其他函数。我认为函数 2 中的所有内容都有可能(尽管不太可能)是内联的,所以也许不应该有任何进一步的解决方案。如果这是真的,这不会产生非常有趣的分析结果。
如果您遇到这种类型的事情,您如何强制分析器显示进一步的分辨率?或者,如果我的直觉是错误的,还有什么可能导致这种行为?
根据 callgrind 网站的说明,我正在使用 -g 标志进行编译,并启用了优化。
arm - valgrind 不适用于我在 linux ubuntu 16.04 中的 32 位可执行文件
我正在尝试在我的 32 位可执行文件(示例)上运行 valgrind 工具,我在 linux Ubuntu 主机 16.04(64 位)下构建,但它无法运行,错误:错误 ELF。
示例应用程序构建为在 arm32 中运行,在我的主机 linux 机器中交叉编译。
这是我运行的命令。
我运行了 memcheck 工具,但也失败了。
然后我做了什么,我导出了 valgrind lib 路径,但这没有帮助+
我只是我的 lib 目录,我找到了整个列表并找到了 callgrind,所有的库都在那里。
不知道出了什么问题以及如何在我的可执行文件上使用 valgrind。
任何帮助,不胜感激。
c++ - 带有循环检测的 Callgrind 性能分析
我第一次尝试使用 Callgrind/Kcachegrind 来分析我的 C++ 应用程序,我注意到需要更多时间的两个函数是:
- < 循环 1 > (50% 自我) 和
- do_lookup_x (15% 自我)
现在,根据我的理解,周期 1 与递归调用函数所用时间的估计有关,但我不太清楚我应该如何解释在这里花费的如此长的时间。如果有一些周期,我想看看哪个函数被调用得更频繁,最后占用更多的 CPU 时间。如果我禁用循环检测(视图->循环检测),那么循环 1 会消失,但“自我”时间总计约为 60%,我不确定这是最好的做法。关于 do_lookup_x 我完全一无所知......
你能澄清一下我应该如何解释这些结果吗?
提前致谢。