【发布时间】:2013-03-01 10:45:37
【问题描述】:
如何使用android工具DDMS解决c++代码中的内存泄漏问题 我尝试通过启用 NativeHeap 拍摄快照,但我不明白 快照在说什么,符号没有解析,没有显示文件名和行号。
【问题讨论】:
标签: android android-ndk ddms
如何使用android工具DDMS解决c++代码中的内存泄漏问题 我尝试通过启用 NativeHeap 拍摄快照,但我不明白 快照在说什么,符号没有解析,没有显示文件名和行号。
【问题讨论】:
标签: android android-ndk ddms
DDMS 中的本机堆跟踪是一项不受支持的“隐形”功能。让它工作可能有点棘手。邮件列表中有一个older discussion 可能有用。
如果您正在接收数据并启动 UI,那么您已经成功了一半。 :-) DDMS 在特定位置查找符号,您应该能够使用 ANDROID_SYMBOLS 环境变量覆盖该符号,并将地址转换为带有 addr2line 的行(它也必须能够找到)。
查找大泄漏的最简单方法是配置 DDMS 以按库对分配进行排序。让应用程序运行一段时间,看看哪个库似乎增长最快。查看归属于该库的分配,看看是否有很多来自同一个地方。查看堆栈跟踪,看看从那里进行许多长期分配是否有意义。不是很严格,但通常可以解决问题。
要更彻底地检查堆,您可以在设备上运行 valgrind,但第一次设置并不容易。
【讨论】:
adb shell am dumpheap -n <pid> /sdcard/dump.txt 获取“原始”数据。
addr2line 的路径:ANDROID_ADDR2LINE
使用分配跟踪器。这是关于在 Android 中查找内存泄漏的精彩讨论:http://www.youtube.com/watch?v=_CruQY55HOk
这里有一篇关于它的博文:http://www.curious-creature.org/2009/02/07/track-memory-allocations-on-android/
【讨论】: