android+adb+shell+kill+进程,ADB+Shell监控Android显示异常并获取日志SHELL脚本分享
前几日遇到样机在运行一段时间后出现显示异常问题,查看Logcat日志只能看到SurfaceFlinger因为Binder异常EX_TRANSACTION_FAILED导致重启。但是具体什么原因导致而此问题却无从得知,查看dmesg信息也不足。并且SurfaceFlinger重启后显示恢复正常,从而难以找到确切原因。如果能够在SurfaceFlinger重启时保存下之前很长一段时间的日志将非常有用。
前几日遇到样机在运行一段时间后出现显示异常问题,查看Logcat日志只能看到SurfaceFlinger因为Binder异常EX_TRANSACTION_FAILED导致重启。但是具体什么原因导致而此问题却无从得知,查看dmesg信息也不足。并且SurfaceFlinger重启后显示恢复正常,从而难以找到确切原因。
如果能够在SurfaceFlinger重启时保存下之前很长一段时间的日志将非常有用。因此写了如下脚本。
#!/bin/bash
rm *.log -rf;
rm *.info -rf;
adb wait-for-device;
echo "get proccess and thread info!";
adb shell ps -AT > start_ps-AT.info;
echo "make test log!";
startpid=`sudo adb shell ps -ef | grep composer | awk '{print $2}'`
count=0
flg=0
while true; do
#echo "To make logcat.log!";
#adb logcat > logcat$count.log
logproc=`sudo adb shell ps -ef -o ARGS | grep "logcat -t"`
if [ -n "$logproc" ]
then
echo "Wait the logcat end!";
else
adb logcat -t 5000 > logcat$count.log &
dmesgpid=`sudo adb shell ps -ef | grep dmesg | awk '{print $2}'`
adb shell dmesg -w> dmesg$count.log &
if [ -n "$dmesgpid" ]
then
adb shell kill $dmesgpid;
fi
echo "To make logcat$count.log & dmesg$count.log!";
count=$[++count]
fi
endpid=`sudo adb shell ps -ef | grep composer | awk '{print $2}'`
if [ $endpid -eq $startpid ]
then
adb shell ps -AT > end_ps-AT.info;
sleep 0.2s
else
echo "proccess dead";
adb logcat > logcat_last.log &
adb shell dmesg > dmesg_last.log &
sleep 5s
break;
fi
if [ $count -gt 50 ]
then
count=0 ;
rm dmesg[0-9].log -rf;
rm logcat[0-9].log -rf;
fi
if [ $flg -eq 0 ]
then
continue;
fi
if [ $count -gt 25 ]
then
flg=1;
rm dmesg1[0-9].log -rf;
rm logcat1[0-9].log -rf;
fi
done
通过此脚本可以连续的获取dmesg和logcat的日志从而分析处具体的问题,并且可以自动监测停止并保存日志。
这里特分享给大家,大家可以根据自己的需要修改使用。
更多推荐
所有评论(0)