问题标签 [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.
profiling - valgrind 报告 malloc 断言失败,memcheck 不报告任何错误
Callgrind 报告了 malloc 中的断言冲突,尽管 memcheck 和通常的运行没有显示任何错误:
stp: malloc.c:3096: sSYSMALLOc: 断言`(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof (size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' 失败。
运行命令是:
taskset -c 7 valgrind --main-stacksize=256768768 --tool=callgrind no-asserts-no-cbitp/stp ~/profiling-stp/python-samples-without-const-arr/*.smt
该程序是使用 -O2 -g 选项构建的。在运行 valgrind 之前,会调用“ulimit -s unlimited”。
是否可以获得 Callgrind 报告的错误的堆栈跟踪?如果没有 - 想法如何调试?
谢谢!
profiling - 在 kcachegrind 中查看 gprof 输出
如何在 kcachegrind 中查看 gprof 的输出?这里是从 gcc 的 gmon.out 到 callgrind.out 的转换器吗?
valgrind - Kcachegrind/callgrind 对于调度程序功能不准确?
我有一个模型代码,kcachegrind/callgrind 报告了奇怪的结果。这是一种调度程序功能。调度员从 4 个地方调用;每个调用都说明要运行哪个实际do_J
函数(因此first2
只会调用do_1
等等do_2
)
源代码(这是实际代码的模型)
编译gcc -O0
; 用valgrind --tool=callgrind
; kcache 用kcachegrind
和研磨qcachegrind-0.7
。
这是应用程序的完整调用图。do_J 的所有路径都通过调度程序,这很好(do_1 被隐藏得太快了,但它真的在这里,只是留给 do_2)
让我们重点do_1
看看,谁叫它(这张图是不正确的):
这很奇怪,我认为,只有first2
和outer2
调用do_1
但不是全部。
这是 callgrind/kcachegrind 的限制吗?如何获得带有权重的准确调用图(与每个函数的运行时间成正比,无论有无子函数)?
valgrind - 关于 callgrind 输出
我正在使用 http://valgrind.org/docs/manual/cl-manual.html 来分析我的应用程序。但我有一个问题,它是否显示
- 该函数内部消耗的时间
或者
- 在该函数调用中消耗的 CPU
我猜是目前它在 curl connect 中显示 90% 的使用率。我认为这是 i/o 绑定过程。
所以我认为它显示了该函数调用中消耗的时间。
c++ - 如何使用 Kcachegrind 理解 callgrind 的输出
在分析日志时,Kcachegrind 显示 %of inclusive 为 13.92%。如常见问题解答 Q:1中所述,它不应该接近 100%吗?
这是配置文件日志的屏幕截图
c++ - Valgrind 是否调用grind 使用总时间或“执行时间”来创建数据
我有一个问题,我的应用程序随线程数线性扩展(想想 800 个线程在双核 CPU 上的性能是 400 个线程的两倍)。我的直觉告诉我线程正在休眠或被阻塞......但我在 callgrind 中看不到它。
callgrind 也测量函数时间,或者只是线程活动创建数据的时间。如果不清楚我要问什么......线程确实
2 秒,然后
...将i++
是调用图的大约 100% 或大约 66%。
c++ - 仪器关闭时调用缓慢
我正在使用 callgrind 来分析一个 linux 多线程应用程序,并且大多数情况下它工作得很好。我从仪器关闭(--instr-atstart=no)开始它,然后一旦设置完成,我用callgrind_control -i on打开它。但是,当我更改某些配置以尝试分析应用程序的不同部分时,它甚至在我打开检测之前就开始运行非常缓慢。基本上,正常操作需要几秒钟的部分代码在 callgrind (仪器关闭)下需要一个多小时。关于为什么会这样以及如何调试/解决缓慢的任何想法?
kcachegrind - 如何在此 kCacheGrind 输出中找到“缺失”时间?
我正在分析 kCacheGrind(实际上是 WinCacheGrind)来分析 cachegrind 文件,当每个进程的“自我”时间相加时,总时间远不及整个页面的累积时间。更具体地说,整个页面的self时间为6561ms,但{main}内的children累计时间加起来只有96ms。
任何想法如何最好地确定“失踪”时间?
不幸的是,我是新手,所以不能包含图片,但希望我已经提供了足够的开始。如果没有,请告诉我我能提供什么。
谢谢。
编辑:这就是我所看到的http://www.flickr.com/photos/76072991@N02/6832545235/
valgrind - 解释 callgrind 数据
我的应用需要一个动态调用图。我用callgrind
工具(valgrind
套件)运行它并得到callgrind.out.xxxxx
文件。现在,我想对这些数据进行图形表示。KCacheGrind
对我没有多大帮助,因为它绘制了图形的有限部分(绘制了 ~50 个函数而不是 ~1500 个配置文件,我不知道如何解决这个问题)。如何获得将绘制所有函数的图形图像?
c++ - 花费的配置文件时间
我正在寻找一些工具来分析时间花在哪里。看过oprofile,但这并没有真正给我我需要的东西。
我正在查看 callgrind,特别是使用 CALLGRIND_START_INSTRUMENTATION 和 CALLGRIND_STOP_INSTRUMENTATION 宏。我不希望该工具像 valgrind 通常那样使应用程序减慢太多。但这并没有真正起作用,因为 Valgrind 似乎将所有内容都序列化到一个线程中。
例如,如果 fn A 调用 fn C 的 fb B,然后返回到 B 和 A,我想知道在哪里花费了多少时间。我有一些正在使用的互斥锁工具,但是一个好的时间工具对于查看时间到底花在哪里非常有用,这样我就可以专注于这些路径。除了自己添加一些东西之外,有什么工具可以用来完成这项任务吗?顺便说一句,它是一个 C++ 应用程序。我不能使用 valgrind,因为它在内核中是单线程的。此外,我的应用程序需要花费大量时间等待,所以普通的 CPU 分析器并没有真正提供太多帮助。