3

如何使用 android 工具 DDMS 解决我尝试的 C++ 代码中的内存泄漏,通过启用 NativeHeap 拍摄快照,但我不明白快照在说什么,符号没有解析,没有显示文件名和行号。

4

2 回答 2

6

DDMS 中的本机堆跟踪是不受支持的“隐形”功能。让它工作可能有点棘手。邮件列表上有一个较早的讨论可能有用。

如果您正在接收数据并启动 UI,那么您已经成功了一半。:-) DDMS 在您应该能够用ANDROID_SYMBOLS环境变量覆盖的特定位置查找符号,并将地址转换为行addr2line(它也必须能够找到)。

查找大泄漏的最简单方法是配置 DDMS 以按库对分配进行排序。让应用程序运行一段时间,看看哪个库似乎增长最快。查看归属于该库的分配,看看是否有很多来自同一个地方。查看堆栈跟踪,看看从那里进行许多长期分配是否有意义。不是很严格,但它经常起到作用。

要对堆进行更彻底的检查,您可以在设备上运行 valgrind,但这并不容易第一次设置。

于 2013-03-13T23:44:06.890 回答
2

使用分配跟踪器。这是关于在 Android 中查找内存泄漏的精彩讨论:http ://www.youtube.com/watch?v=_CruQY55HOk

在这里你有一篇关于它的博客文章:http ://www.curious-creature.org/2009/02/07/track-memory-allocations-on-android/

于 2013-03-13T13:15:43.663 回答