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 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )

Android方法调用耗时分析工具:开发者模式-System Tracing

PHP使用debug_backtrace方法跟踪代码调用

如何在 Java 中跟踪方法调用?

跟踪使用 Sinon/Mocha 调用方法的次数

C/C++ 需要一种聪明的方法来跟踪函数调用