实际Android手机上的Android软件NDK原生c代码评测

实际Android手机上的Android软件NDK原生c代码评测,android,profiling,android-ndk,Android,Profiling,Android Ndk,我正在Android上开发一个相当大的软件,带有一个日志本机代码,它现在可以工作了,但是有一些性能问题 我希望我能在几个真正的android手机上分析软件的每个模块(函数调用)的CPU周期、内存使用情况等。有一个简单的c库可以做到这一点吗 我看到有人在使用oprofile,对于我的案例来说,这似乎有点过分了,因为它是一个系统野生探查器,需要重建内核和系统映像 由于我有我的应用程序的完整源代码,所以我真正需要的是一个简单的c库,我可以将它嵌入到我的代码中,以便在应用程序运行多个测试用例时进行一些分

我正在Android上开发一个相当大的软件,带有一个日志本机代码,它现在可以工作了,但是有一些性能问题

我希望我能在几个真正的android手机上分析软件的每个模块(函数调用)的CPU周期、内存使用情况等。有一个简单的c库可以做到这一点吗

我看到有人在使用oprofile,对于我的案例来说,这似乎有点过分了,因为它是一个系统野生探查器,需要重建内核和系统映像

由于我有我的应用程序的完整源代码,所以我真正需要的是一个简单的c库,我可以将它嵌入到我的代码中,以便在应用程序运行多个测试用例时进行一些分析


顺便说一句,Linux是如何做到这一点的?

我使用android ndk profiler获得了相当不错的结果


Outputs/mnt/sdcard/gmon.out

我使用android ndk profiler获得了相当不错的结果


输出/mnt/sdcard/gmon.out

你能在调试器下运行应用程序吗?您可以手动中断暂停吗?然后可以使用随机暂停方法来查找性能问题。NDK调试器支持仅在froyo中可用,另外,如果我想在多个不同的手机上运行评测,我可以使用系统方法。NDK-gdb是可用的,并且应该能够在按住ctrl-C键时为您提供堆栈跟踪。这不是为了衡量绩效。它旨在找到要优化的代码以提高性能。测量不会发现问题,但无论平台如何,发现和解决问题都会改进测量。(我知道人们通常不是这么想的,但这就是如何让代码快速运行的。)我相信在Linux中,你需要编译并链接
-p
-pg
以启用评测。你能在调试器下运行应用程序吗?您可以手动中断暂停吗?然后可以使用随机暂停方法来查找性能问题。NDK调试器支持仅在froyo中可用,另外,如果我想在多个不同的手机上运行评测,我可以使用系统方法。NDK-gdb是可用的,并且应该能够在按住ctrl-C键时为您提供堆栈跟踪。这不是为了衡量绩效。它旨在找到要优化的代码以提高性能。测量不会发现问题,但无论平台如何,发现和解决问题都会改进测量。(我知道这不是人们通常的想法,但这是如何让代码快速运行的。)我相信在Linux中,您需要编译并链接
-p
-pg
,以启用评测。不幸的是,它几乎毫无用处。除了非常脆弱(仅适用于某些版本的gprof和gcc等),没有完整的堆栈采样。不幸的是,它几乎没有任何用处。除了非常脆弱(仅适用于某些版本的gprof和gcc等),没有完整的堆栈采样。