有关Monkey命令的两个隐藏选项

简介:

一般Android App的测试过程,常用的Monkey选项如同官网中所列,但如果看Monkey源代码或则通过 monkey --help,还是能找到一些有意思的东西。
其中,有2个网页中没有提到的选项。

  1. --bugreport
  2. --hprof

bugreport 其实对应的是一个叫做bugreport的工具,可以运行adb bugreport观察,它提供了那个时刻系统非常多的信息,从meminfo,cpuinfo,vmstat到dmesg,buildprop等信息,多到想不到。有兴趣的,可以google之。
当这个标签在Monkey的运行中标识的时候,每当Monkey运行时发现AppCrash,anr,system not responding的时候,Monkey就会自动记录错误时的信息。

    // Write the bugreport to the sdcard.
    private void getBugreport(String reportName) {
        reportName += MonkeyUtils.toCalendarTime(System.currentTimeMillis());
        String bugreportName = reportName.replaceAll("[ ,:]", "_");
        commandLineReport(bugreportName + ".txt", "bugreport");
    }

可以在 /mnt/sdcard里面找到类似于app_crashnet.crimoon.pm.a91_2014-07-29_01_01_22.990_.txt 这样的文件。每个问价有15MB到20MB大小,内容翔实,乃是开发debug之宝。

hprof的作用就是,在monkey开始之前和结束之后(正常结束,被kill的不算),会调用如下代码

    /**
     * Send SIGNAL_USR1 to all processes. This will generate large (5mb)
     * profiling reports in data/misc, so use with care.
     */
    private void signalPersistentProcesses() {
        try {
            mAm.signalPersistentProcesses(Process.SIGNAL_USR1);

            synchronized (this) {
                wait(2000);
            }
        } catch (RemoteException e) {
            System.err.println("** Failed talking with activity manager!");
        } catch (InterruptedException e) {
        }
    }  

这个代码的作用,就是对于所有persistent的process,获取它的hprof信息,类似于对于所有的persistent应用 kill -10 pid。它的好处也不言而喻,hprof文件出来了,找内存泄漏还远么。
有一点要吐槽的是,注释里面明明说 /data/misc里面记录该文件,实际上,还是保存在了 /mnt/sdcard 里面。文件名类似于 com.aliyun.ams.assistantservice_hprof_dump20140728203235.prof。一般每个文件大约5MB,也看到过 com.android.systemui,比较夸张,有25MB。
可见,这个开关对于测试整个系统的内存泄漏,还是会有比较大的帮助的。

目录
相关文章
|
算法 Shell 测试技术
Monkey 常用命令详解含高级参数应用
Monkey 常用命令详解含高级参数应用
Monkey 常用命令详解含高级参数应用
|
5月前
CMD 隐藏窗口运行
CMD 隐藏窗口运行
160 0
|
2月前
|
数据安全/隐私保护
window常用命令及添加隐藏账户
window常用命令及添加隐藏账户
26 0
|
5月前
|
Shell
shell获取上一次命令输出到屏幕的数据
shell获取上一次命令输出到屏幕的数据
|
6月前
|
存储 网络协议 API
17.1 隐藏执行CMD命令
本章内容涉及使用`Socket API`和`CMD`命令行工具实现本地`CMD`命令执行、无管道正向`CMD`和无管道反向`CMD`三种功能。执行本地`CMD`实现使用`CreateProcess`函数创建一个新的`CMD`进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向`CMD`和无管道反向`CMD`使用`WSASocket`函数创建`TCP`套接字,并将`CMD`进程的标准输入、输出和错误输出重定向到套接字的句柄上,通过网络连接实现远程命令执行功能。首先来实现一个`CMD`命令行运行功能,通过使用`CreatePipe`创建匿名管道,并使用`Crea
35 0
17.1 隐藏执行CMD命令
一种切实可行的后台执行脚本方法——利用VB脚本隐藏CMD命令窗口
一种切实可行的后台执行脚本方法——利用VB脚本隐藏CMD命令窗口
331 0
|
Python
如何优雅地解析命令行选项(下)
随着我们编程经验的增长,对命令行的熟悉程度日渐加深,想来很多人会渐渐地体会到使用命令行带来的高效率。 自然而然地,我们自己写的很多程序(或者干脆就是脚本),也希望能够像原生命令和其他程序一样,通过运行时输入的参数就可以设定、改变程序的行为;而不必一层层找到相应的配置文件,然后还要定位到相应内容、修改、保存、退出……
233 0
|
Python
如何优雅地解析命令行选项(上)
随着我们编程经验的增长,对命令行的熟悉程度日渐加深,想来很多人会渐渐地体会到使用命令行带来的高效率。 自然而然地,我们自己写的很多程序(或者干脆就是脚本),也希望能够像原生命令和其他程序一样,通过运行时输入的参数就可以设定、改变程序的行为;而不必一层层找到相应的配置文件,然后还要定位到相应内容、修改、保存、退出……
137 0