Android系统.强制ANR转储

Ser*_*gio 0 android adb

有没有办法为任意进程请求转储,这类似于为ANR生成的进程/data/anr/traces.txt?可能应该可以通过设备的shell.

提前致谢!

Ser*_*gio 5

经过一些研究工作后,我发现它有可能,但遗憾的是不是很有用.因此,要向您添加流程转储,/data/anr/traces.txt只需发送SIGQUIT给您感兴趣的流程.您只需从设备shell运行下一步:

$ kill -s SIGQUIT <pid>
Run Code Online (Sandbox Code Playgroud)

唯一的问题是并非每个用户都可以向任意进程发送信号.它不应该是root设备上的问题.对于其他人,如果您的应用程序包是可调试的,您仍然可以使用此技巧.这个事实允许使用run-as实用程序并kill作为调查过程的用户执行:

$ adb shell
shell@mako:/ $ run-as com.example.sysuser.stunprober                           
shell@mako:/data/data/com.example.sysuser.stunprober $ kill -s SIGQUIT 4712
Run Code Online (Sandbox Code Playgroud)

并且logcat输出显示转储被写入:

I/art(4712): Thread[5,tid=4721,WaitingInMainSignalCatcherLoop,Thread*=0xb74c4d28,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
I/art(4712): Wrote stack traces to '/data/anr/traces.txt'
Run Code Online (Sandbox Code Playgroud)