2013-03-13 62 views

回答

6

机堆跟踪是不支持的“隐形”功能。让它工作可能有点棘手。邮件列表上有一个older discussion,可能有用。

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

寻找大泄漏最简单的方法是配置DDMS按库分类分配。让应用程序运行一段时间,看看哪个库似乎正在增长最快。查看归因于该库的分配情况,看看是否有很多来自同一个地方。看看堆栈跟踪,看看从那里获得许多长期分配是否合理。不是非常严格,但它常常会有诀窍。

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

+0

我使用了调试符号,现在符号得到解决,并显示代码的函数名称,地址和行号。 现在我正在运行应用程序,并使用了一个功能,例如:打开选项并查看关于应用程序的信息(版本,信用),评估应用程序种类的链接以及回到应用程序的信息视图。现在在这种情况下可以找到泄漏。 – vsmph 2013-03-18 14:04:51

+1

如果您重复该过程10次,并且每次都泄漏对象,则应该看到具有相同堆栈跟踪的分配的10个副本。如果您能够“检查”早期运行并对分配进行区分,它会更有效,但有时候只要查看分配情况,问题就会跳出来。如果它很有用,你可以通过'adb shell dumpheap -n /sdcard/dump.txt'获取“原始”数据。 – fadden 2013-03-18 16:43:37

+0

非常感谢。它运行良好,我发现真正的大漏洞。 ----------------------------- 对于某些情况下,我无法多次运行场景,例如登录用户名。那种情况是无法涵盖的。对这些案例的任何建议都是值得欢迎 – vsmph 2013-04-04 10:34:53