我曾经用gprof做我所有的Linux分析.
但是,对于我的多线程应用程序,它的输出似乎不一致.
现在,我挖了这个:
http://sam.zoy.org/writings/programming/gprof.html
但是,从很久以前开始,在我的gprof输出中,看来我的gprof列出了非主线程使用的函数.
所以,我的问题是:
1)2010年,我可以轻松使用gprof来分析多线程Linux C++应用程序吗?(Ubuntu 9.10)2)我应该研究哪些其他工具进行性能分析?
我正在尝试在运行OSX 10.5.7的计算机上使用gprof配置C++应用程序.我以通常的方式使用g ++编译,但是使用-pg标志,运行应用程序并尝试使用gprof查看调用图.
不幸的是,我的调用图包含所有时间列的全零."被调用"列中的值具有合理的值,因此看起来有些内容被分析但我对其他数据的缺乏感到困惑.
我的所有源文件都以类似的方式编译:
g++ -pg -O2 -DNDEBUG -I./ -ansi -c -o ScenarioLoader.o ScenarioLoader.cpp
Run Code Online (Sandbox Code Playgroud)
然后我运行'ar'将所有目标文件捆绑到一个库中.后来,我链接并运行gprof如下:
g++ -pg -lm -o vrpalone vrpalone.o ../src/atomicprof.a lastbuild.o
./vrpalone
gprof gmon.out | less
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
使用gprof时:
$ gprof options [executable-file [profile-data-files...]] [> outfile]
Run Code Online (Sandbox Code Playgroud)
如果你有选择传递给可执行文件,如:
gprof a.out --varfred=32
Run Code Online (Sandbox Code Playgroud)
然后gprof假设我传递了一个无效的选项,而不是传递给profiled(a.out)的程序.
有办法解决这个问题吗?
我正在研究Linux环境.我有两个'C'源包train和test_train.
现在我想用gprof生成一个调用图,它显示了主程序中函数的调用顺序以及libtrain.so中的函数调用顺序.
我正在使用-pg选项编译和链接两个包,调试级别为o0.在我执行./train-test之后,生成gmon.out.然后我做:
$ gprof -q ./train-test gmon.out
Run Code Online (Sandbox Code Playgroud)
这里,输出显示列车测试中的函数调用图,但不显示libtrain.so中的调用图
可能是什么问题呢 ?
我试图了解编译C代码时-pg(或-p)标志如何工作gcc.
官方gcc文档仅说明:
-pg
生成额外的代码以编写适用于分析程序gprof的配置文件信息.编译所需数据的源文件时必须使用此选项,并且在链接时也必须使用它.
这真的让我感兴趣,因为我正在对分析器进行一项小型研究 - 试图选择最适合这项工作的工具.
我正在运行Ubuntu 16.10并尝试使用gprof配置程序.我用标志编译,-pg程序是单线程的.实际的编译命令是:
g++ -I. -std=c++11 -Wall -Wextra -O3 -pg -fPIC -Wno-unused-parameter -c -o build/obj/performance/stencil_application.o test/performance/stencil_application.cpp
g++ -I. -std=c++11 -Wall -Wextra -O3 -pg -Wno-unused-parameter build/obj/performance/stencil_application.o -o build/test/performance/stencil_application
Run Code Online (Sandbox Code Playgroud)
运行时程序需要几秒钟才能完成,并生成一个名为gmon.out的文件.但是,当我运行时gprof ./build/test/performance/stencil_application,我得到的输出不包含数字.我只得到表格标题和不同字段的解释,如下所示:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for …Run Code Online (Sandbox Code Playgroud) 我有兴趣获得一些数字运算程序的分析.我用-g和-pg选项编译它并链接它并得到它gmon.out.阅读信息(纯文本)后,它看起来有点难看.我想知道是否有一些开源工具可以获得程序花费大部分时间的10个函数的图形表示以及通量图.
谢谢
我们如何列出应用程序中调用的所有函数.我尝试使用GDB,但它的回溯列表只能到主函数调用.
我需要更深的列表,即主函数调用的所有函数的列表以及从这些调用的函数调用的函数等等.
有没有办法在gdb中得到它?或者你能给我一些关于如何获得这个的建议吗?
我想用gprof来配置一个守护进程.我的守护进程使用第三方库,它使用它来注册一些回调,然后调用一个main永不返回的函数.我需要调用kill(SIGTERM或SIGKILL)来终止守护进程.不幸的是,gprof的手册页说明如下:
配置文件程序必须调用"exit"(2)或正常返回,以便将配置文件信息保存在gmon.out文件中.
是否有方法可以保存使用SIGTERM或SIGKILL杀死的进程的分析信息?