在软件开发的过程中,对于一些对性能较高的程序,经常需要对程序进行性能分析。GNU profiler就是这样一款性能分析工具,后被移植到android平台上,可以对ndk程序进行分析。
使用步骤如下:
1. 下载android-ndk-profiler,地址为:https://code.google.com/p/android-ndk-profiler/wiki/Downloads?tm=2
(如果上不去google code,可以到 http://download.csdn.net/detail/loushuai/8206953这里下载,或者联系我发给你)
2. 将android-ndk-profiler.zip 解压到某个目录下,比如“d:\Tools\”
3. 修改Android.mk文件,加入如下内容
# 在Android.mk文件最后
4. 修改你的代码。
在初始化阶段加入(别忘了包含压缩包里的prof.h文件):
"/sdcard/gmon.out"是你保存gmon.out文件的路径。
5. 修改AndroidManifest.xml文件,增加对sd卡的写访问权限
6. 重新编译工程
ndk-build NDK_MODULE_PATH=d:\Tools\
其中,“d:\Tools\”换成你实际解压android-ndk-profiler.zip的路径。
OK,至此准备工作完成。
启动你的程序,在程序退出之后,在你所指定的路径中应该会生成一个gmon.out文件。
下面是对结果进行查看的步骤:
1. 将gmon.out文件拷贝到本地,如“d:\gmon.out”
2. 将你的库文件“your_lib.so”拷贝到本地,如“d:\your_lib.so”( 注意,这里的so文件不是lib下的so,而是obj/local下的)
3. 用ndk工具包里的gprof工具对结果进行分析
d:\android-ndk-r9d\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-gprof.exe d:\your_lib.so d:\gmon.out就可以看到结果了。如果想把结果存成文本文件,可以使用重定向指令
d:\android-ndk-r9d\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-gprof.exe d:\your_lib.so d:\gmon.out > d:\result.txt
gprof命令的参数很多,具体可以参考官网说明。
使用步骤如下:
1. 下载android-ndk-profiler,地址为:https://code.google.com/p/android-ndk-profiler/wiki/Downloads?tm=2
(如果上不去google code,可以到 http://download.csdn.net/detail/loushuai/8206953这里下载,或者联系我发给你)
2. 将android-ndk-profiler.zip 解压到某个目录下,比如“d:\Tools\”
3. 修改Android.mk文件,加入如下内容
LOCAL_CFLAGS := -pg
LOCAL_STATIC_LIBRARIES := android-ndk-profiler
# 在Android.mk文件最后
$(call import-module,android-ndk-profiler)
4. 修改你的代码。
在初始化阶段加入(别忘了包含压缩包里的prof.h文件):
/* in the start-up code */
monstartup("your_lib.so");
在退出阶段加入:
/* in the onPause or shutdown code */
setenv("CPUPROFILE", "/sdcard/gmon.out", 1);
moncleanup();
其中“your_lib.so”就是你的ndk编出来的动态库文件名。
"/sdcard/gmon.out"是你保存gmon.out文件的路径。
5. 修改AndroidManifest.xml文件,增加对sd卡的写访问权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
6. 重新编译工程
ndk-build NDK_MODULE_PATH=d:\Tools\
其中,“d:\Tools\”换成你实际解压android-ndk-profiler.zip的路径。
OK,至此准备工作完成。
启动你的程序,在程序退出之后,在你所指定的路径中应该会生成一个gmon.out文件。
下面是对结果进行查看的步骤:
1. 将gmon.out文件拷贝到本地,如“d:\gmon.out”
2. 将你的库文件“your_lib.so”拷贝到本地,如“d:\your_lib.so”( 注意,这里的so文件不是lib下的so,而是obj/local下的)
3. 用ndk工具包里的gprof工具对结果进行分析
d:\android-ndk-r9d\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-gprof.exe d:\your_lib.so d:\gmon.out就可以看到结果了。如果想把结果存成文本文件,可以使用重定向指令
d:\android-ndk-r9d\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-gprof.exe d:\your_lib.so d:\gmon.out > d:\result.txt
gprof命令的参数很多,具体可以参考官网说明。