我知道我可以分析我的代码gprof和kprofLinux上.在Windows上是否有与这些应用程序相当的替代方案?
问候,
这是我的SConstruct文件:
env = Environment()
env.Append(CCFLAGS=['-g','-pg'])
env.Program(target='program1', source= ['program1.c'])
Run Code Online (Sandbox Code Playgroud)
这里还有编译的输出:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 program1.o
scons: done building targets.
Run Code Online (Sandbox Code Playgroud)
如您所见,我将"-pg"选项传递给构建环境.在我构建之后,我运行程序来生成"gmon.out",但它没有生成.
谁能证实这个问题?还是有解决方案?
谢谢.
更新:
感谢此处给出的建议,更新的工作SConstruct文件如下所示.链接器需要标志,因此要通过scons传递它,必须使用"LINKFLAGS"选项.
env = Environment()
env.Append(CCFLAGS=['-g','-pg'], LINKFLAGS=['-pg'])
env.Program(target='program1', source= ['program1.c'])
Run Code Online (Sandbox Code Playgroud)
编译输出:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 -pg program1.o
scons: …Run Code Online (Sandbox Code Playgroud) 如何在 kcachegrind 中查看 gprof 的输出?这里是从 gcc 的 gmon.out 到 callgrind.out 的转换器吗?
我一直在使用gprof探查器g++.
我的代码中有一个函数,它封装了几个与主函数相关的行为部分,将它们分解为自己的函数是没有意义的.
我想知道每个代码区域花了多少时间.
所以,如果你想象代码看起来像
function(){
A
A
A
B
B
B
C
C
C
}
Run Code Online (Sandbox Code Playgroud)
其中A,B和C代表我感兴趣的代码的特定部分,有没有办法gprof告诉我在这些特定部分上花了多少时间?
我正在使用GPROF在Ubuntu 17.10上进行一些c文件测试,当我使用gprof执行生成的文件(gmon.out),使用-pg选项进行编译和链接时,我得到了一个空的平面图和调用图。然而,我发现这是一个错误的gcc和我将不得不编译和文件与-no馅饼链接。
编译:gcc的-c的main.c文件1.C文件2.C -pg [-no馅饼]
链接:gcc的-o测试main.o文件1.O文件2.O -pg [-no馅饼]
我有gcc 7.2版本。
此选项如何工作?如果我不使用该选项,为什么图形为空?
我正在遵循一个教程,该教程介绍了如何使用 gprof 分析程序,给出的命令如下
gcc -Wall -pg test_gprof.c test_gprof_new.c -o test_gprof
但它没有对这个标志给出任何解释(-Wall)
什么是_Unwind_SjLj_Unregister和_Unwind_SjLj_Register?我在gprof报告中将它们作为我的顶级处理器时间用户.谷歌只返回抱怨这两个错误的人的链接.
这是我报告中唯一有时间的部分!= 0:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
33.33 0.03 0.03 _Unwind_SjLj_Unregister
22.22 0.05 0.02 _Unwind_SjLj_Register
11.11 0.06 0.01 13886 0.00 0.00 toint(std::string, int)
11.11 0.07 0.01 4380 0.00 0.00 hexlify(std::string)
11.11 0.08 0.01 2994 0.00 0.00 std::_Deque_iterator<unsigned char, unsigned char const&, unsigned char const*>::operator+(int) const
11.11 0.09 0.01 std::string::assign(char const*, unsigned int)
Run Code Online (Sandbox Code Playgroud)
我正在运行Windows 7 x64,并使用代码块10.05 gcc进行编译
编辑:
启用强制程序运行64秒的函数后,它现在看起来像:
Flat profile:
Each sample counts as …Run Code Online (Sandbox Code Playgroud) 我想从gprof生成的输出中排除一些函数.换句话说,在计算执行期间每个函数花费的百分比时间时,我不希望它们被包括在内.我在一个地方读书-E选项可以使用.
但是我正在使用gprof -E function_to_be_exluded my_program_name,但没有任何反应.手册说它是折旧的,你应该使用symspecs.然而,我浪费了半个小时试图弄清楚如何用symspecs实现它,但没有运气.任何人都可以帮助我.
我很困惑是否可以使用启用了OpenMP的gcc编译/链接gprof的分析构建.就我的谷歌搜索指出,gcc文档似乎对此事保持沉默.实验上,仅添加-fomp开关会导致SIGPROF启动时出错.
我也不清楚是否http://projekt17.pub.lab.nm.ifi.lmu.de/ompp/downloads/$pkgname-$pkgver.tgz有任何帮助,因为包含的doc仅指含有简单文件的icc.如果可以,那么如何将其添加到现有构建系统?[注意:我是一个自学成才的新手,从事一个爱好项目,请明确.谢谢.]
我在我的电脑上安装了MinGWDistro 15.0.
当我在cmd中运行它时
g++ "snackstore.cpp" -o "snackstore.exe" -g -pg
snackstore.exe
gprof.exe "snackstore.exe" gmon.out > gmon.txt
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
BFD: Dwarf Error: Could not find abbrev number 3699.
Run Code Online (Sandbox Code Playgroud)
你能告诉我什么是错的吗?