问题标签 [gprof]
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++ - 带有 c++ 程序的 MacOS 10.6 上的 gprof 有调用数据但没有计时数据 --- 为什么?
我有一个在 MacOS 10.6 上运行的 C++ 单线程程序。它正在获取呼叫计数,但不是时间信息。
这是一个输出示例:
很奇怪吧?通过了 31,377,020 个呼叫,但记录了 0 次。
有人知道发生了什么吗?
gcc - gprof:读取 48/271618093 个垃圾箱后出现意外的 EOF?
有谁知道这个错误意味着gprof
什么?我在跑步gcc -pg
。谢谢。
gcc - gcc:对 _mcount 的未定义引用(gprof 检测)
-pg
当使用注入 gprof 配置文件检测代码的选项编译我的 c++ 源代码时,编译失败并出现undefined reference to _mcount
错误。
如果没有这个选项,一切都可以编译(和运行)正常。我的情况有什么问题?(Solaris 10 SPARC 平台)
profiling - gprof 搞砸了
我正在尝试 2 配置一个 cpp 代码。我用 -pg 标志编译,在我分析它以获得输出后,我得到了一些非常奇怪的函数名称。这是我正在使用的make文件:
这是 gprof 输出的示例:
这些是文件中的真实函数名称:
我忘记了任何标志吗?为什么分析还显示函数的参数?是因为它们是类吗?是因为它是cpp吗?我熟悉 gprof 和 c 但这是我第一次遇到 cpp
欢迎任何帮助:)欢呼=)
profiling - gprof 究竟是如何工作的?
这是一个臃肿的问题,所以我提前道歉。我很好奇如何gprof
在低技术水平上工作。我知道它是由计时器完成的,但是为什么需要专门编译可执行文件才能进行分析?编译是否会导致为统计分配空间?
另外,时间是如何精确完成的?
c++ - gprof 输出不准确
我正在尝试使用 gprof 分析一个 c++ 函数,我对所花费的时间很感兴趣。我跑了不止一次,由于某种原因,我的结果有很大的不同。我不知道是什么原因造成的,我假设采样率或者我在其他帖子中读到 I/O 与它有关。那么有没有办法让它更准确并以某种方式产生几乎恒定的结果?
我在想以下几点:
- 提高采样率
- 在执行任何操作之前刷新缓存
- 使用另一个分析器,但我希望它以与 grof 类似的格式生成结果作为函数时间%函数名称,我尝试了 Valgrind,但它给了我一个很大的文件。所以也许我正在使用错误的命令生成文件。
等待您的输入
问候
c - 如何分析在 FreeBSD 上运行的连续运行的服务器
可能重复:
在终止进程之前保存 gmon.out
我正在尝试在 Linux 环境中分析服务器(我可以使用源代码。c 代码)。该服务器像 Web 服务器一样连续运行。我正在尝试使用 gprof 来分析服务器。如果服务器自行退出,则会生成 gmon.out 文件。我可以使用 gprof 和 gmon.out 来了解分析数据。现在我遇到的问题是,这台服务器一直在运行,等待传入的套接字连接、请求等。如果我杀了这台服务器,则不会生成 gmon.out。此时我看到以下选项。
- 在收到 SIGKILL 信号后将源代码更改为配置文件并记录此信息。这是迄今为止最糟糕的解决方案,可能会在测量中引入噪声。
- 也许有一种方法可以在服务器仍在运行时使用 gprof 来分析该服务器。
- 其他工具可以尝试吗?
编辑:服务器是多进程服务器。在 FreeBSD 7.2 上运行
我敢肯定,人们以前已经解决过这类问题。我没有找到关于 SO 或外部的有用信息。
我很欣赏人们的任何想法/解决方案。
谢谢一堆。
更新 1:
- gprof 似乎不适用于多进程服务器。当我在执行服务器后设法获得 gmon.out 时,只有父进程被检测,它实际上并没有做真正的工作!。
- oProfile 不支持我的服务器运行的 FreeBSD。由于各种原因,我不能(不允许)更改操作系统。
- Valgrind 网站没有 FreeBSD 的端口。但是有一些引用到 FreeBSD 的移植。我找不到 FreeBSD 端口源。
不知何故,我设法获得了 valgrind 的端口。当我运行 make 我得到以下错误。
我试图在网上找到 valgrind-stable-352.tar.gz。我发现的所有链接都已失效。
我在 freebsd 上安装了 pstack,实现的 pstack 只提供堆栈跟踪。参考:http: //sourceforge.net/projects/bsd-pstack/
我的理解是 systemtap 仅用于内核空间事件、检测等。
我可能是错的或没有足够的信息。请纠正我并提出您的想法。我非常感谢您的帮助。
更新 2:我认为提供有关我正在尝试分析的服务器的一些详细信息会很有帮助。
- 它是多服务器程序。I/O bound,具体是mysql数据库。
- 不涉及线程。每个子服务器进程只处理一个请求。服务器启动时会创建可配置数量的进程。
- 我想找出每个函数花费的时间及其频率。功能代码是 CPU 绑定和 IO 绑定的混合体(我相信更多的 IO)。
- 它在 FreeBSD 7.2 上运行
- 写在c。读取次数远大于通过此服务器写入数据库的次数。
linux - 在哪里可以获得 libc_p.so 源代码?
我想在目标硬件中分析我拥有的进程,我只能将源代码检查为 libc.so,因为我的 MIPS 目标硬件没有可用的 libc_p.so。我期望:我,有 MIPS libc_p.so 库可用;或者二,有libc_p源代码,我可以自己编译MIPS库。
我期待着各位专家的好建议。
c - 按执行顺序列出函数
我在一个文件中定义了几个函数(主要函数由其他人定义)。
我可以使用 gprof 来分析我的函数被调用了多少次,但是有没有办法按照它们在主程序中调用的顺序来获取函数列表?
当然,我可以在每个函数的开头写一条消息,但其中有很多。
如果 gdb 可以通过指定“中断在此文件中调用的第一个函数”之类的内容来完成,我也会很高兴。同样,它们太多了,无法明确列出。
谢谢。
c++ - 在 C++ 中记录代码执行
在多次使用gprof和callgrind 之后,我得出了一个(显而易见的)结论,即在处理大型(如加载整辆车的 CAD 程序)程序时,我无法有效地使用它们。我在想也许,我可以使用一些 C/C++ MACRO魔法,并以某种方式构建一个简单(但很好)的日志记录机制。例如,可以使用以下宏调用函数:
我们可以在函数调用之前和之后添加一些时钟/计时的东西,这样每个用 CALL_FUN 调用的函数都会被计时,例如
变量 t0、t1 可以在全局日志记录对象中找到。该日志记录对象还可以保存通过CALL_FUN调用的每个函数的调用图。之后,可以将该对象写入(特定格式的)文件中,并从其他程序中解析。
所以我的(第一个)问题来了:你觉得这种方法容易处理吗?如果是,如何增强它,如果不是,您能否提出一种更好的方法来测量时间和记录调用图?
一位同事提出了另一种解决此问题的方法,即用特定的注释注释每个函数(我们关心记录)。然后,在 make 过程中,必须运行一个特殊的预处理器,解析每个源文件,为我们要记录的每个函数添加日志逻辑,使用新添加的(解析)代码创建一个新的源文件,然后构建该代码。我想到处阅读 CALL_FUN... 宏(我的建议)并不是最好的方法,他的方法可以解决这个问题。那么您对这种方法有何看法?
PS:我对C/C++ MACROs的陷阱不是很熟悉,所以如果可以用其他方法开发,请说出来。
谢谢你。