Android 方法调用跟踪
Posted
技术标签:
【中文标题】Android 方法调用跟踪【英文标题】:Android Methods calling tracking 【发布时间】:2012-06-04 16:18:54 【问题描述】:每次进入和退出方法时,我都在更改代码以打印日志消息的一半。当我认为 Eclipse 可能有一些功能或插件可以为我跟踪并展示给我时。毕竟,这是java编译器手头的信息。
我需要查看每个方法被调用和返回的顺序。
它应该打印方法名称和它上面的所有堆栈,这样我就可以知道谁调用了。
可选,如果它打印进出时间和差异,这将是分析的好信息。
我记得以前尝试过 TraceView,不知道是不是答案,但我清楚地记得那里的信息太多,我无法清楚地了解发生了什么。 如果有人知道如何正确使用它来仅获取我需要的信息,那就太好了。
更新: 我很难使用 TraceView 和他的同伴 dmtracedump。我做了一些我不应该做的事情,我搜索了 dmtracedump 代码源并查看了它。 这是产生我收到的错误消息的代码。
TraceData data1;
DataKeys* dataKeys = parseDataKeys(&data1, gOptions.traceFileName,
&sumThreadTime);
if (dataKeys == NULL)
fprintf(stderr, "Cannot read trace.\n");
exit(1);
但是我不知道如何修复跟踪文件。它是由Debug.startMethodTracing("tracefile");
生成的
我希望有一种方法可以告诉 Java 编译器打印每个方法调用。在这一点上我很沮丧。
【问题讨论】:
【参考方案1】:我建议不要实现您自己的分析服务,而是使用 Google 为我们提供的the absolutely excellent tool TraceView!
如果您在使用 TraceView 时遇到问题,您只能使用以下方法分析代码的某些部分:
// start tracing to "/sdcard/calc.trace"
Debug.startMethodTracing("calc");
// ...
// stop tracing
Debug.stopMethodTracing();
我自己使用过它,它可以告诉您进行分析所需了解的所有内容。
【讨论】:
是的,我愿意这样做,请参阅我的最后一段。当我使用它时,我得到了大量的信息,其中大部分我现在不需要。主要是因为它我无法使用结果。你知道如何限制追踪信息的数量吗? :::: 另外我记得使用启动/停止方法跟踪确实会生成一个跟踪文件,但我不知道如何从 Eclipse 中打开它,然后我使用了 DDMS 中的 StartMethodProfiling 按钮。 TraceView 是一个单独的程序,包含在 android SDK 中 是的,我知道。现在您已经了解到可以在 Eclipse 中从 DDMS 角度使用它。 :::: 在您发布的链接中进行了说明。但仍然……信息太多;我不想看到所有的操作系统调用,它们是大多数,只有我的方法。 我已经有一段时间没用了,不过你应该可以按名称排序,这样更方便 在努力使 TraceView 和 dmtracedump 按我的意愿工作之后,我可以说“绝对优秀的工具”是废话。 :::: 设计不佳的用户界面,没有过滤掉不需要的条目的功能。没有帮助文档。这就是有效的工具!,dmtracedump 甚至不读取跟踪文件。【参考方案2】:我找到了一种自己修改文件的方法,以便在我的源中的任何位置插入和删除日志消息。
我写在this post
【讨论】:
以上是关于Android 方法调用跟踪的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )