Articles of gprof

用gcc -pg -g编译后,gmon.out不会写入

使用gcc -pg -g编译C ++程序(至less,这些是我在Makefile中给出的参数;没有任何有关执行命令的确凿证据)。 程序运行到CWD设置为我的主目录正常完成。 没有gmon.out文件写入。 gcc是4.4.7。 操作系统是centos 6。 我的程序是使用fork / exec手动启动的Perl守护进程启动的。 我已经validation了CWD是我的主目录,而且它是可写的,通过让守护进程在执行我的目标程序之前执行touch foo 。 据我所能研究,这应该不会影响程序的分析或写(gmon.out),当它终止(通常)。

为了分析(-pg),为什么我的代码在multithreading下比使用单线程运行速度慢?

我正在写一个射线追踪器。 最近,我在该程序中添加了线程,利用我的i5四核上的附加内核。 在奇怪的一系列事件中,应用程序的debugging版本现在运行速度较慢,但​​优化后的版本运行速度比添加线程之前要快。 我将“-g -pg”标志传递给gcc用于debugging构build,并将优化构build的“-O3”标志传递给gcc。 主机系统:Ubuntu Linux 10.4 AMD64。 我知道debugging符号为程序增加了大量的开销,但相对的性能一直保持。 即更快的algorithm在debugging和优化构build中总是运行得更快。 任何想法,为什么我看到这种行为? debugging版本是用“-g3 -pg”编译的。 使用“-O3”优化版本。 Optimized no threading: 0m4.864s Optimized threading: 0m2.075s Debug no threading: 0m30.351s Debug threading: 0m39.860s Debug threading after "strip": 0m39.767s Debug no threading (no-pg): 0m10.428s Debug threading (no-pg): 0m4.045s 这使我确信,“-g3”不是怪怪性能差异的三angular洲,而是“-pg”开关。 “-pg”选项可能会添加某种locking机制来衡量线程性能。 由于“-pg”在线程应用程序中被破坏了,我只是删除它。

任何方式来指定configuration文件数据的位置

configuration文件是从可执行文件中运行的默认文件,名为gmon.out 。 有什么办法指定一个新的位置? 我在i386 / linux2.6上使用gcc 3.4.6

Gprof:特定的function时间

我想了解一下我的程序中某个特定function所花费的时间。 为了这个目的,我正在使用gprof。 我使用下面的命令获取特定function的时间,但是日志文件仍显示程序中所有function的结果。 请在这方面帮助我。 gprof -F FunctionName Executable gmon.out>log

在杀死一个进程之前保存gmon.out

我想用gprof来分析一个守护进程。 我的守护进程使用第三方库,它注册了一些callback,然后调用一个main函数,永不返回。 我需要调用kill (SIGTERM或SIGKILL)来终止守护进程。 不幸的是,gprof的手册页面上说: configuration文件程序必须调用“exit”(2)或正常返回configuration文件信息以保存在gmon.out文件中。 有没有办法保存用SIGTERM或SIGKILL杀死进程的分析信息?

使用Eclipse时在Windows上分析C代码

我知道我可以在Linux上用gprof和kprof来分析我的代码。 在Windows上有这些应用程序可供select吗?