精华内容
下载资源
问答
  • android日志分析
    千次阅读
    2019-10-30 23:12:38

    近期开始接触Android相关内容,从基础开始学习吧。

    一、Android 日志分类

    Android日志主要分为kernel、radio、event、main四种,相关描述如下:

        1. Kernel log:包含多线程并发的信息,进程所使用的内存情况,进程访问磁盘的请求信息。kernel log属于Linux内核的log ,可以通过读取/proc/kmsg或者通过串口来抓取。adb 抓取kernel log的命令如下(需要有root权限):

    adb shell cat /proc/kmsg > /sdcard kernel.log

        2. radio log:抓取Android RIL层 log,在调试Android通信方面的代码时,这个Log非常关键。抓取命令如下:

    adb logcat -b radio   >/sdcard radio.log

        3. main log:main log和我们在eclipse里通过DDMS中看到的log是一致的。抓取命令如下:

    adb logcat -b main >/sdcard main.log

        4.event Log:系统级别的event。比如垃圾回收,Activity管理状态,系统的watchdogs,其他底层的Activity。event log属于  system log,平时可以跟在main log之后。抓取命令如下:

    adb logcat -b events -v time > /sdcard event.log

    (-v time表示在log中加入每条log打印的时间)

        5.完整log: adb logcat -b选项是可以复用的,因此我们抓取所有Log的命令就是复用了-b选项。抓取命令如下:

    adb logcat -b main -b system -b radio -b events -v time > /sdcard all.log

        6.其他如下:

    frameworks/base/core/java/android/util/Log.java //用于记录main log
    frameworks/base/core/java/android/util/Slog.java //用于记录framework log
    frameworks/base/telephony/java/android/telephony/Rlog.java //用于记录radio log
    frameworks/base/core/java/com/android/internal/os/RuntimeInit.java //内部记录了crash log

    二、Android 日志级别与过滤

    • Android输出的每一条日志都有一个标记和优先级与其关联。优先级是下面的字符,顺序是从低到高:

    V 明细 verbose(最低优先级),开发调试中的一些详细信息,仅在开发中使用,不可在发布产品中输出,不是很常见,包含诸如方法名,变量值之类的信息

    D调试 debug,用于调试的信息,可以在发布产品中关闭,比较常见,开发中经常选择输出此种级别的日志,有时在beta版应用中出现

    I 信息 info,该等级日志显示运行状态信息,可在产品出现问题时提供帮助,从该级别开始的日志通常包含完整意义的英语语句和调试信息,是最常见的日志级别

    W — 警告 warn,运行出现异常即将发生错误或表明已发生非致命性错误,该级别日志通常显示出执行过程中的意外情况,例如将try-catch语句块中的异常打印堆栈轨迹之后可输出此种级别日志

    E — 错误 error,已经出现可影响运行的错误,比如应用crash时输出的日志

    F — 严重错误 fatal,比error级别更高,目前我只在android系统内核发出的日志中看到此种级别。在Android6.0以前表明开发者认为绝对不应该出现的错误,在此以后一般开发场景下绝不应该输出此种级别的日志

    S — 无记载 silent,寂静,最高级别,没有一条日志会属于这个级别,仅仅作为关闭logcat输出的过滤器参数

    • 相关过滤命令(使用I,V,D,E,F,W 等过滤)

    清除缓存的log信息:adb logcat -c
    adb logcat *:I //显示所有优先级大于等于“info”的日志
    adb logcat *:V //显示所有优先级大于等于“verbose”的日志
    adb logcat ActivityManager:I  *:S  //仅输出标记为“ActivityManager”且优先级大于等于“Info”的日志
    • 分类展示:

    adb logcat -s papaya  //显示 papaya 的日志信息
    adb logcat -v tag  //按照标签来打印日志信息
    adb logcat -v thread  // 显示 I,D,E等日志类型的进程ID、线程ID
    • grep 过滤(windows 可用find代替)

    adb logcat | grep PID  //根据进程id来过滤
    adb logcat | grep -i myapp  //根据字符串来过滤,并忽略大小写
    adb logcat | grep "^..MyApp"  //仅匹配 tag 过滤, tag 是一行开头的第三个字符开始

    三、Bugreport 日志分析

           bugreport记录android启动过程的log,以及启动后的系统状态:包括进程列表,内存信息,VM信息等。

    • dumpstate: 内存信息,CPU信息,Procrank信息,系统日志VmTrack信息等。

    • build.Prop: 当前版本/当前命令,显示系统Build的一些属性等。

    • dumpsys: (Dump of serene Meminfo)显示某个进程的更详细的内存消耗情况及Native and Java(Davik)堆栈的统计

    dumpsys可以用于查询以下信息,例如:dumpsys [options]

                   meminfo :显示内存信息

                   cpuinfo :显示CPU信息

                   account :显示accounts信息

                   activity :显示所有的activities的信息

                   window :显示键盘,窗口和它们的关系

                   wifi :显示wifi信息

    四、Log分析步骤

    Step 1:首先查看一些版本信息,确认问题的系统环境 

    Step 2:查看CPU/MEMORY的使用状况,看是否有内存耗尽、CPU繁忙等情况出现

    Step 3:分析traces信息,因为traces是系统出错以后输出的一些线程堆栈信息;可以很快定位到问题出在哪里

    Step 4:分析SYSTEM LOG,系统Log详细输出各种log,可以找出相关log进行逐一分析

        bugreport实例分析:按照以上的log分析步骤进行相关分析

    Step1:查看系统版本信息,确认问题系统环境

    Step2:查看CPU/MEMORY的使用情况(Android使用procrank和dumpsys meminfo分析内存占用情况),由日志以下内容可知,系统内存空间剩余近700M。

    MemTotal: 1048576 kB
    MemAvailable: 756304 kB
    Cached: 110392 kB

    ------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------User 70 + Nice 3 + Sys 70 + Idle 250 + IOW 4 + IRQ 0 + SIRQ 0 = 397

    cpu使用情况:指的是一个最小时间片内所占用的时间,单位是jiffies。user表示处于用户态的运行时间,不包含优先值为负的进程;Nice:优先值为负的进程占cpu的时间;sys:处于核心态的运行时间; Idle:除IO等待时间外的其他等待时间

    User 18%, System 17%, IOW 1%, IRQ 0% //cpu占用率:user用户进程,system系统进程,IOW就是io等待时间,IRQ硬中断时间

    Buffers:   6620 kB
    MemFree:   714776 kB

    ------ MEMORY INFO (/proc/meminfo) ------

    PID                        

    TID

    PR

    CPU%

    S

    VSS

    RSS

    PCY

    UID

    Thread

    Proc

    9

    9

    0

    7%

    S

    0K

    0K

     

    root

    migration/0

     

    2271

    2271

    3

    4%

    S

    505916K

    37700K

    fg

    system

    system:ui

    system:ui

    PID:进程在系统中的ID 

    PR:优先级(数值越小,优先级越高)

    CPU%:当前瞬时所以使用CPU占用率 

    S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数 

    VSS: Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) 

    RSS:实际使用的物理内存,包括共享库

    UID: 运行当前进程的用户id 

    Thread:程序当前运行的线程

    • Procrank分析

    procrank是按照内存占用情况对进程进行排序。因为它需要遍历/proc下的所有进程获取内存占用情况,所以在运行时候需要有root权限。可用排序的有VSS、RSS、PSS、USS。

    PSS:Proportional Set Size,实际使用的物理内存,共享库按比例分配

    USS:Unique Set Size,进程独占的物理内存,不计算共享库,也可以理解为将进程杀死能释放出的内存。USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加。

    一般VSS >= RSS >= PSS >= USS

    • dumpsys meminfo内存信息示例(也可直接使用此命令查看)
    Total PSS by process:
       38102 kB: com.android.smart.terminal.iptv (pid 2231 / activities)
       21334 kB: zygote (pid 1506)
       21199 kB: system (pid 1894)
       10878 kB: com.android.settings (pid 2358)
         9809 kB: mediaserver (pid 1508)
         9607 kB: android.process.media (pid 2100)
         ………………..
         121 kB: servicemanager (pid 1501)
    Total PSS by OOM adjustment:
       62627 kB: Native
                   21334 kB: zygote (pid 1506)
                   9809 kB: mediaserver (pid 1508)
                   5375 kB: smbd (pid 2579)
                   4360 kB: nmbd (pid 2588)
                   2497 kB: surfaceflinger (pid 1505)
                   2255 kB: smbd (pid 2587)
                   1589 kB: logcat (pid 2023)
                   ………………
    
                     121 kB: servicemanager (pid 1501)
    
       21199 kB: System
                   21199 kB: system (pid 1894)
       77156 kB: Persistent
                   38102 kB: com.android.smart.terminal.iptv (pid 2231 / activities)
                   5981 kB: com.hisilicon.android.inputmethod.remote (pid 2165)
                   5839 kB: com.hisilicon.dlna.dmr (pid 2208)
                   5710 kB: com.hisilicon.android.hiRMService (pid 2181)
                   5595 kB: com.android.smart.terminal.settings (pid 2217)
                   5547 kB: com.androidmov.tr069 (pid 2248)
                   5220 kB: com.android.smart.terminal.iptv.aidl:remote (pid 2325)
                   5162 kB: com.hisilicon.dlna.dms (pid 2191)
         5731 kB: A Services
                   5731 kB: com.android.music (pid 2549)
       35189 kB: Cached
                   10878 kB: com.android.settings (pid 2358)
                   9607 kB: android.process.media (pid 2100)
                   9080 kB: system:ui (pid 2271)
                   5624 kB: com.explorer (pid 2627)
    
    
    Total PSS by category:
       55941 kB: .so mmap
       44064 kB: Dalvik
       28413 kB: .dex mmap
       20933 kB: Native
       17885 kB: Dalvik Other
       ………………
    
    Total RAM: 1048576 kB
    Free RAM: 791329 kB (35189 cached pss + 156792 cached + 599348 free)
    Used RAM: 194269 kB (166713 used pss + 7108 buffers + 1036 shmem + 19412 slab)
    Lost RAM: 62978 kB
    ZRAM: 4 kB physical used for 0 kB in swap (102396 kB total swap)
    Tuning: 192 (large 256), oom 81920 kB, restore limit 27306 kB (high-end-gfx)

    打印某个程序内存信息,可加包名,例如:dumpsys meminfo com.android.launcher

    补充:

    Android程序内存被分为两个部分:native和dalvik。dalvik即为java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制native+dalvik 不能超过最大限制。Android程序内存一般限制在16M,当然也有24M的。

    从上信息对于分析内存泄露,内存溢出都有极大的作用,从以上信息可以看到该应用程序占用的native和dalvik,当TOTAL 12239 7760 736 0 9340 7178 1993超过内存最大限制时会出现OOM错误。

    Step 3: traces日志分析(traces日志在data/anr目录中)

    可查询虚拟机信息:包括进程/线程的跟踪信息,用来跟踪进程和线程的具体点。格式如下:

    DALVIK THREADS:"main" prio=5 tid=1 
    SUSPENDED //主线程挂起 
    
    | state=S schedstat=( 0 0 0 ) utm=78 stm=9 core=0
    
    | group="main" sCount=1 dsCount=0 obj=0x417becc0 self=0x1a8d4f0
    
    (mutexes: tll=0 tsl=0 tscl=0 ghl=0)
    
    | sysTid=1894 nice=-2 sched=0/0 cgrp=apps handle=1073893740 
    
    at android.util.SparseArray.<init>(SparseArray.java:~72) 
    
    at android.net.wifi.WifiManager.<clinit>(WifiManager.java:554) 
    
    at android.app.ContextImpl$ServiceFetcher.getService(ContextImpl.java:269) 
    
    at android.net.wifi.WifiStateTracker.startMonitoring(WifiStateTracker.java:96) 
    
    at com.android.server.ConnectivityService.<init>(ConnectivityService.java:455) 
    
    at com.android.server.SystemServer.main(SystemServer.java:1308) at java.lang.reflect.Method.invoke(Method.java:515) 
    
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:650)
    
    at dalvik.system.NativeStart.main(Native Method)
    
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:834)
    
    at java.lang.reflect.Method.invokeNative(Native Method)
    
    at com.android.server.ServerThread.initAndLoop(SystemServer.java:594)
    
    at com.android.server.ConnectivityService.<init>(ConnectivityService.java:649)
    
    at android.app.ContextImpl.getSystemService(ContextImpl.java:1712)
    
    at android.app.ContextImpl$44.createService(ContextImpl.java:-1)
    
    at android.util.SparseArray.<init>(SparseArray.java:61)

          根据以上日志找出导致main主线程suspend的类WifiStateTracker中对应的具体96行代码和ContextImpl中1712行代码可知,产生主线程suspend是wifi监控线程检测不到wifi连接。

    Step 4:系统日志:SYSTEM LOG,详细输出各种log

    日志格式如下:

    ------ SYSTEM LOG (logcat -v threadtime -d *:v) ------
    
    --------- beginning of /dev/log/system
    
    01-01 08:00:02.352 1502 1502 I Vold   : Vold 2.1 (the revenge) firing up
    
    01-01 08:00:00.037 1502 1502 D Vold   : [-vold_debug-86] :the service.vold.status is Normal
    
    01-01 08:00:00.044 1502 1502 D Vold   : [-vold_debug-122] :defaultVolume = /storage/emulated/0
    
    01-01 08:00:00.044 1502 1502 D Vold   : [-vold_debug-139] :bind mount /mnt/sdcard to /storage/emulated/0 ok !
    
    01-01 08:00:00.044 1502 1502 D VoldCmdListener: [-vold_debug-785] :IsoMountCmd created!
    
    01-01 08:00:00.045 1502 1502 I Vold   : Load vold.emmc.fstab
    
    01-01 08:00:00.045 1502 1502 D Vold   : [-vold_debug-562] :multi_mount!
    
    01-01 08:00:00.045 1502 1502 D Vold   : [-vold_debug-261] :addVolumeDir
    
    01-01 08:00:00.045 1502 1502 D Vold   : [-vold_debug-585] :multi_mount!!
    
    01-01 08:00:00.046 1502 1502 E Vold   : Vold is Running
    
    -----------------------------------------------------------------------------------

          根据以上几种日志类型可以分析系统的内存信息、CPU信息、各种线程堆栈信息以及系统详细信息。基于此可以对相关问题进行分析排查。

    更多相关内容
  • 为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • APP测试-Android日志分析1.日志,又称为 Log,保存的文件称为trace文件,是我们测试人员的又一利器,其实,不管是在调试还是测试的时候,日志都可以帮助我们解决问题。 2.所谓的日志,其实是一种记录机制,允许...
  • android日志分析_Android日志分析

    千次阅读 2021-01-12 14:45:22
    android日志分析 Android对所有日志使用集中式系统,应用程序程序员也可以编写自定义日志消息。 开发Android应用程序的工具允许您为感兴趣的日志语句定义过滤器。日志分析是开发的一个阶段,开发人员有时会遇到它。 ...
    android日志分析

    android日志分析

    Android对所有日志使用集中式系统,应用程序程序员也可以编写自定义日志消息。 开发Android应用程序的工具允许您为感兴趣的日志语句定义过滤器。日志分析是开发的一个阶段,开发人员有时会遇到它。 错误日志有助于在开发阶段识别Android应用程序中的错误。 将应用程序投放市场后,支持工程师将分析错误日志以解决问题。 Android生态系统中提供了不同类型的日志-应用程序日志,系统日志,事件日志和广播日志。日志记录系统由用于存储日志消息的内核驱动程序和内核缓冲区,用于创建日志条目和访问日志消息的C,C ++和Java类,用于查看日志消息的独立程序(logcat)以及查看和过滤功能组成来自主机的日志消息(通过eclipse或ddms)。Linux内核中有四个不同的日志缓冲区,它们为系统的不同部分提供日志记录。 通过文件系统中的设备节点/ dev / log访问不同的缓冲区。 四个日志缓冲区分别是主缓冲区,事件缓冲区,无线电缓冲区和系统缓冲区。 主日志用于应用程序,事件用于系统事件信息,无线电用于电话相关信息,系统是低级系统消息和调试。

    日志中的每个消息都包含一个标记,该标记指示消息来自系统或应用程序的一部分,时间戳(此消息何时到达),消息日志级别(或消息所代表的事件的优先级)和日志消息本身(错误,异常或信息等的详细说明)。每种日志类型包含什么:1.应用日志使用android.util.Log类方法将不同优先级的消息写入日志Java类将它们的标记静态声明为字符串,并将其传递给log方法。 使用的日志方法表示消息“严重性”(或日志级别),当日志由检索工具(logcat)处理时,可以按标签或优先级过滤消息。2.系统日志使用android.util.Slog类编写具有不同优先级的消息及其关联消息许多Android框架类都利用系统日志来将其消息与(可能是嘈杂的)应用程序日志消息分开。 格式化的消息通过C / C ++库传递到内核驱动程序,该驱动程序将消息存储在适当的缓冲区(系统缓冲区)中3.事件日志事件日志消息是使用android.util.EventLog类创建的,该类创建二进制格式的日志消息。 日志条目包含二进制标记代码,后跟二进制参数。 消息标记代码存储在系统上的/ system / etc / event-log-tags中。 每个消息都有日志消息的字符串,以及指示与该条目关联(存储)的值的代码。4.广播日志用于与无线电和电话(调制解调器)相关的信息。 日志条目由二进制标记代码和网络信息消息组成记录系统将带有特定标签的消息自动路由到无线电缓冲区设备登录pCloudy平台。

    设备日志过滤器选项

    Android上的日志格式android中常见的日志格式:tv_sectv_nsec优先级pidtid标签messageLen Message标签:日志标签tv_sec&tv_nsec:日志消息的时间戳pid:日志消息来源的进程IDtid:线程ID优先级值是下列字符值之一,从最低优先级到最高优先级排序:V —详细(最低优先级)*D-调试*我-信息*W —警告*E-错误*F-致命*S-静音(最高优先级,从未印刷过任何内容)日志文件位置日志(包括崩溃的日志)存储在几个目录中,并且没有标准化的目录(即某些目录可能是特定于ROM的)。 我在这里介绍一些共同点。/ data / anr:Dalvik在ANR上在此处写入堆栈跟踪,即“应用程序无响应”或“ Force-Close”/ data / dontpanic:包含一些崩溃日志,包括跟踪/ data / kernelpanics:-存储与“ kernel panic”相关的日志/ data / tombstones:-可能包含几个tombstone_nn文件(nn是从0到10的数字,在10之后又要重复一次)“日志”命令行工具从android设备/模拟器捕获日志下面是一些命令行工具。 在现实生活中的项目中,有日志捕获应用程序/工具,用于捕获用户设备上的日志并将其共享回给开发人员/维护人员进行分析。adb logcat(显示当前android系统的所有类型的日志adb logcat -v threadtime(它将包括日期和时间)adb logcat -v threadtime> logfile.txt(将日志存储在logfile.txt中)有用的过滤器模式您可以在adb命令中使用下面的filter来过滤日志。 您也可以使用此过滤器搜索日志文件(用户设备提供的日志)。亚行logcat -f

    将所有日志保存到文件中adb logcat“ *:E”获取所有错误和致命信息亚行logcat | grep -i“ foo.example”。 #获取与“ foo.example。*”标记名相关的所有日志adb logcat“ application_or_tag_name:*”“ *:S”按应用程序名称获取所有日志adb logcat -b事件“ gsm_service_state_change”“ *:S”获取所有GSM状态更改adb logcat -b radio获取所有广播事件日志分析在此博客中,我们对Android日志记录系统有了基本的了解。 在分析来自应用程序的日志时,您可以将其分为两部分,调试日志–在开发和测试阶段的文件以及生产日志–直接来自最终用户的文件。 最好的方法是使用有用的过滤器模式,并使用某些工具,例如GoogleLogTool和SonyLogTool。

    翻译自: https://www.javacodegeeks.com/2020/08/android-logs-analysis.html

    android日志分析

    展开全文
  • 为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • Android日志分析工具-V3.6.4与工具源代码. QT C++ 代码开源。 Android常用开发工具Eclipse和Android Studio本身自带有日志查看工具LogCat,一般性使用基本满足要求。但若长期处于Android的深度开发,会发现自带的...
  • Android日志分析工具-V3.6.3

    热门讨论 2017-08-22 16:49:54
    为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • android日志分析&崩溃拦截,包括如下: andorid手机程序错误信息的demo.rar android app异常收集处理.rar android java 通用代码,关于用properties存储打印的Log.zip android 错误收集工具.rar android 错误...
  • Android日志分析工具的开发介绍

    万次阅读 热门讨论 2017-04-20 14:14:46
    Android日志分析工具的开发介绍 一,软件下载地址: 技术交流QQ群:513138238(用于公布软件最新版本信息和相关技术交流) [V3.6.3] http://download.csdn.net/detail/u013662621/9945190 [V3.5.3] ...
    

    Android日志分析工具的开发介绍

    一,软件下载地址:

    技术交流QQ群:513138238(用于公布软件最新版本信息和相关技术交流)

    [V3.9.2] https://download.csdn.net/download/u013662621/85396833

    [V3.6.4] Android日志分析工具-V3.6.4_android日志分析工具,android日志查看工具-Android工具类资源-CSDN下载

    [V3.6.3] Android日志分析工具-V3.6.3-Android工具类资源-CSDN下载
    [V3.5.3] Android日志分析工具-V3.5.3-Android工具类资源-CSDN下载
    [V3.5.2] Android日志分析工具-V3.5.2_androidlog分析工具,android日志分析工具-Android工具类资源-CSDN下载
    [V3.4.2] Android日志分析工具--V3.4.2-Android工具类资源-CSDN下载
    [V3.2.2] Android日志分析工具V3.2.2修复版-Android工具类资源-CSDN下载
    [V3.1.1] Android日志分析工具V3.1.1-Android工具类资源-CSDN下载
    [V3.0.0] Android日志分析工具修复版-Android工具类资源-CSDN下载

    [Linux-IDE]下载地址

    [V1.0.1] 百度一下,你就知道

    <Linux-IDE:end>

    二,软件简介
    Android常用开发工具Eclipse和Android Studio本身自带有日志查看工具LogCat,一般性使用基本满足要求。但若长期处于Android的深度开发,会发现自带的工具内容缓冲区有限,会造成历史数据的丢失,且无法进行信息过滤和日志头自动提取分类。为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需依赖开发工具。另外,软件为完全自主开发,对后期若有新的功能需求可以很方便的进行功能扩展和维护。

    欢迎反馈意见到964195140@qq.com

    软件界面预览

    三,软件设计框架概览

    四,软件功能简介
    1,左侧Filters为日志头过滤器栏,当载入日志文件时会自动识别;
    2,日志内容会自动根据打印等级显示不同的颜色以区分;
    3,可通过设置右上角的日志等级筛选出大于等于该等级的打印信息;
    4,可通过中上方的搜索框搜索日志内容,搜索规则为:任意字符串,大小写不敏感;
    5,可通过设置时间过滤器的起止时间来筛选出在该时间范围内的所有日志信息;
    6,可通过设置信息过滤器的开关来选择是否显示对应的信息;
    7,可通过工具栏中模式切换按钮在“离线查看模式”和“实时终端模式”之间切换;
    8,可通过工具栏中ADB连接按钮,进行ADB设备的扫描、连接、断开等操作;
    9,软件底部显示当前工作的状态,如:工作模式、ADB设备状态、当前打开的日志文件路径;
    10,退出实时终端模式时可将日志缓存文件导出另存;
    11,可在软件设置中配置外部ADB工具的路径;
    12,对日志内容解析后,可提供:行号、时间、等级、PID进程号、Tag、文本信息;
    13,在实时终端模式中,ADB设备断开或丢失后可自动重连3次,并自动恢复日志内容的显示,若3次重连失败则退出ADB环境;
    14,可通过将鼠标移动到Tag列表栏的某一项上,预览该Tag的完整信息;
    15,文件加载过程有进度条提示;
    16,可通过菜单栏中最近打开的文件选项快速打开文件;
    17,可通过快捷键“Ctrl+G”或者工具栏中的对应图标快速跳转到指定行;
    18,支持保存软件的全局配置属性和重要数据到配置文件中,待软件下次启动时可恢复上一次的操作环境;若该文件不存在,则会自动生成配置文件;和导志内志信该软件;

    19,支持软件配置文件的备份和导入;
    20,支持快捷键Ctrl+C复制当前选中的日志内容;
    21,支持进程过滤器,即仅显示与选中进程相关的日志信息;
    22,支持在具有加密策略的电脑上使用该软件;支持软件配置文件的备份和导入;
    23,优化实时终端模式下日志内容的刷新,新增文件光标定位器,并优化日志Tag提
    提器,使得最终的日志内容刷新率高达50~100Hz,且刷新频率不再受文件大
    小的影响,此机制的实现使得实时监控的连续时间可无限长;
    24,新增日志Tag系统级过滤器,主要过滤输出数量占比较大且不具备很大分析价值
    的内容,既可以让更有价值的内容快速呈现,也很大程度的节省了内存的占用;
    25,新增日志内容搜索进度条的显示,提醒用户当前的搜索状态;
    26,软件启动前新增重构并删除上一次软件异常闪退时未删除的日志缓存文件,并提
    示用户在删除前是否另存为;
    27,新增对大文件进行分页加载的机制,并设置有快速页跳转的功能(只有当首次遍
    历过所有的页数据后,才可跳转任意页),该机制的实现使得离线分析不再受
    文件大小的限制,同时也保证了软件运行时不会无节制的占用系统内存;
    28,新增实时模式下监控的日志行数达到设定的最大值后自动清空全局数据库,避免
    长时间的监控造成大量内存的占用;
    29,新增实时终端模式下,ADB设备非人为断开或非人为退出终端模式时,自动备份
    当前的日志缓存文件,后期再对这些备份文件进行分析重构,并还原为一个完
    整的日志文件,且设有重构进度条的显示;
    30,新增Tag日志头种类及其数量分析功能,并以图标的形式展现;

    31,新增软件重启功能;
    32,新增实时模式下清空当前显示的功能;
    33,新增设置属性“是否启用调试指定APP”,输入eclipse或android studio中正在调试的APP包名,如“com.example.uidemo”,点击下载程序后,该工具可自动识别并跳转到该APP的进程,并显示相关日志信息;

    34,新增安装APK到指定设备的功能;

    35,支持对android studio自带日志工具导出的日志格式进行解析;
    36,新增软件自动检查是否有更新版本发布,若有,则弹窗提示下载链接;
    37,新增设置选项“是否启用软件安全机制”;

    38,优化软件以支持最新版win10系统;

    五,软件安全保护机制
    为了防止软件被轻易的反编译和破解,于是在该软件中引入了注册码注册机制和软件加壳处理机制,仅对指定设备授权开源(未授权设备仍可以使用所有功能,只是无法查看部分软件信息而已),增大了反编译和破解的难度,一定程度上保护了软件的可维护性。

    六,软件版本升级日志


    【V1.0.0】:初始版  2017/2/6  何晓龙  964195140@qq.com;
    支持Tag过滤;
    支持打印等级过滤;
    支持文本搜索;
    支持根据打印等级以不同的颜色显示内容;
    支持自动提取所有Tag种类以及其对应的数量;
    支持文件的打开与关闭;
    支持设置字体;

    【V2.0.0】:升级版  2017/2/9  何晓龙  964195140@qq.com;
    新增时间过滤器;
    新增信息过滤器;
    支持定位信息头的识别;
    新增文件编码格式的设置;
    新增当前文件重载功能;

    【V3.0.0】:升级版  2017/3/17  何晓龙  964195140@qq.com;
    新增“实时终端模式”,通过ADB连接Android设备,并支持ADB设备扫描、连接、断开、状态显示等功能,且可在“离线查看模式”和“实时终端模式”之间随意切换;
    新增退出实时终端模式时可将日志缓存文件导出另存为的功能;
    新增设置菜单中ADB路径设置的功能;
    新增进程PID号的显示,并在信息过滤器中增加对PID的过滤开关;
    新增实时终端模式下ADB设备连接断开或丢失后自动重连,并自动恢复实时显示日志内容的功能;
    为日志Tag列表栏新增鼠标移动到Tag上时,自动弹出Tip提示,提示内容为该Tag的完整信息,以防止当Tag内容过长而无法完整显示;
    升级ADB命令执行接口,之前为主线程(即UI线程)中阻塞式执行ADB命令,若命令执行时间较长,容易导致UI线程长时间无响应,严重地影响了用户体验;升级后为新建一个专门执行ADB命令的后台线程,使其与主线程互相独立运行,通过信号与槽的方式进行数据交换,如此便可以在不影响UI线程的前提下更好地执行ADB命令,提高了用户体验度;
    新增日志文件加载进度条显示,以更好地提示用户当前的加载进度;
    新增软件工具栏,将软件中常用的操作添加到工具栏中,并配备合理的图标和Tip提示信息,且工具栏可选择显示或隐藏,以及存放的位置(顶部、底部)等,此功能的增加提高了用户的操作性和软件使用的简易性;
    重新设计“关于软件窗口”的布局方式,将软件功能简介和更新日志的详细信息默认隐藏,通过“查看细节”按钮显示详细信息;
    软件菜单栏中新增最近打开文件的历史记录功能,可设置最大记录的文件数量,可通过历史菜单直接选择文件将其打开,无须每次都通过系统的文件管理器方式打开;
    新增跳转到日志文件的指定行的功能,且设有快捷键“Ctrl+G”,可快速跳转到需要查看的行,并将其高亮显示;
    新增退出软件确认对话框功能,防止用户误操作使软件直接退出,而导致分析数据的丢失;
    新增软件全局配置文件的功能:可记录软件的属性设置、文件历史浏览记录、以及一些重要的数据到该文件中,待软件下次启动时可恢复上一次操作的环境;实现原理:定义配置文件的语法格式,创建能够对该文件进行识别、解析、读写的解析器,然后再主程序中通过该解析器来操作配置文件;
    优化对日志数据内容的解析过程以及日志文件的加载,使解析效率提高了70%多;
    优化日志内容显示功能,通过加入显示缓冲区的机制,每次仅加载显示缓冲区中的数据,大大提高了显示速度;
    优化实时终端模式显示日志的方式,通过加入增量式解析的机制,每次仅解析新增的内容,不必重复解析之前已经解析过的内容,如此可将显示速度提升十倍以上,很好的达到了实时显示的效果;
    优化ADB服务器启动功能,增加等待对话框,并新增3次自动重连功能,若3次连接失败,则退出ADB环境;
    优化Tag列表栏的显示,对所有Tag进行按字母排序,以便用户快速查找需要查看的Tag;
    优化自动调整标签栏位置的功能,使其自动调整更加智能且定位准确;
    优化软件状态栏显示方式,使其更加直观舒适;
    修复滚动日志内容到最低端后,仍可继续滚动的BUG;
    修复日志内容显示区域滚动条有时往上滑动时无法滑动的BUG;
    修改日志缓存文件的路径,并增加路径的安全性判断和自动建立的功能;
    修复当退出实时终端模式时,ADB重连导致再次进入终端模式的BUG;
    修复BUG,当快速重复点击“重载文件”按钮时导致多次加载同一文件。修改为仅当一个文件加载完毕后才可继续下一步操作;
    修复BUG,当快速重复点击“连接ADB设备”按钮时导致多次重复执行扫描ADB设备的操作,以至于等待对话框无法正常关闭,而使软件进入假死状态。修改为仅当一次扫描完成后才可继续下一次扫描操作;
    【注意】实时终端模式下,每次只能连续实时监控1小时,超过该时间后由于日志文件过大,导致解析时间比较长,无法达到实时显示的效果;但后台仍然在将日志内容输出到缓存文件,可等待执行完后再将该文件导出后进行离线分析即可;

    【V3.1.1】:优化版  2017/4/21  何晓龙  964195140@qq.com
    新增软件退出时自动删除缓存目录;
    新增配置文件的备份和导入;
    新增ADB连接状态指示灯显示;
    新增进程过滤器,即只显示选中进程的相关日志信息;
    更改软件配置文件存储路径为系统用户(即C盘中我的文档)的路径;
    优化在线ADB设备信息显示,增加厂商、型号、系统版本号、SDK版本号等信息;
    修复由于重复显示等待对话框却无法正常关闭,导致软件死机的BUG;
    修复少数格式的PID进程号解析错误的BUG;

    【V3.2.2】:优化版  2017/4/25  何晓龙  964195140@qq.com
    更改日志缓存文件后缀名为“.log”,以便支持在具有加密策略的电脑上使用该软件,为了兼容旧版本,仍支持对txt格式的日志文件进行离线分析;
    优化日志缓存文件另存为的功能,使用户确定退出终端模式后,立即停止日志输出;
    优化Filter栏选项排序为大小写不敏感;
    修复实时终端模式下Filter栏的项乱跳的BUG;
    修复实时终端模式下滑动滚动条导致软件闪退的BUG;

    【V3.4.2】:优化版  2017/5/5  何晓龙  964195140@qq.com
    优化实时终端模式下日志内容刷新的代码:
    *1)优化增量式文件加载器,新增文件光标位置定位器,每次加载时
    直接跳转到上一次的位置;
    *2)优化日志Tag提取器,将之前的每次计算所有Tag改为增量式计
    算,即每次仅计算新增的内容,然后与之前的叠加即可;
    *3)通过以上方式的优化后,实时模式下日志内容的刷新速度将不再
    受文件大小的影响,且刷新时间基本在20ms以内,即显示刷新频率在
    50Hz以上,真正意义上实现了日志内容实时刷新的功能;
    新增日志Tag系统级过滤器,主要过滤掉输出数量占比较大且不具备很大分析价值的内容,既可以让更有价值的内容快速呈现,也很大程度的节省了内存的占用。该过滤器共分为一级过滤和二级过滤,一级过滤为完全不具备分析价值的内容,二级过滤为极少数情况可能会有一点分析价值;
    新增日志内容搜索进度条显示,提醒用户当前的搜索状态,避免当搜索时间较长时给用户一种软件假死的现象;
    软件启动前新增删除上一次软件异常闪退时未删除的日志缓存文件,并提示用户在删除前是否另存为;
    新增对大文件进行分页加载的机制,可自动识别是否需要对文件进行分页,并设置有快速页跳转的功能;
    *该机制的目的):使离线分析日志文件不再受文件大小的限制,同时保证了软件运行过程中不会无节制的占用系统内存;
    *该机制的原理):每次加载当前页后才能确定下一页的光标偏移量,因此只有当第一次加载过所有页后,才可随意的进行页跳转,否则只能跳转下一页或前面的所有页;
    新增实时模式下监控的日志行数达到设定的最大值后自动清空全局数据库,避免长时间的监控造成大量内存的占用(注意:此处清空仅为软件中数据清空,而实际缓存文件中的数据仍然是存在的);
    新增实时终端模式下,ADB设备非人为断开或非人为退出终端模式时,自动备份当前的日志缓存文件,后期再对这些备份文件进行分析重构,还原为一个完整的日志文件,并对重构的过程设有进度条显示;
    新增Tag日志头种类及其数量分析功能,并以图表的形式展现;
    优化软件退出时若从未开启过ADB服务,则无需执行ADB服务的关闭;
    修复有时软件退出后仍有等待对话框在显示的BUG;
    修复无法输出系统进程system_process的部分日志信息的BUG;
    修复文件加载进度条有时显示异常导致卡死,且无法关闭的BUG;
    修复进行进程筛选后再执行系统过滤设置,在文件重载的过程中软件死机闪退的BUG;
    修复行跳转到最后一行时偶尔造成软件死机闪退的BUG;
    
    【V3.5.2】:优化版  2017/5/19  何晓龙  964195140@qq.com
    新增软件重启功能;
    新增实时模式下清空当前显示的功能;
    新增设置属性“是否启用调试指定APP”,在输入框输入eclipse或android studio中正在调试的APP包名,如“com.example.uidemo”,点击下载程序后,该工具可自动识别并跳转到该APP的进程,并显示相关日志信息;
    优化实时模式下切换打印等级后,重新显示所有信息(旧版为仅显示后面更新的信息);
    优化进程筛选执行后仅显示该进程的信息(旧版为只要包含了该进程的都会显示);
    优化日志缓存文件重构过程,禁止重构进度的人为关闭,防止用户关闭该进程后导致日志文件破损;
    优化文件加载进度条最大值的设定方式,自动识别文件是否需要进行分页处理;
    优化日志内容显示区域中单行被选中时的显示方式,改为前景色不变,背景色高亮;
    修复部分设备采用Log.wtf()打印时实际输出为'F'标志,导致无法解析该内容的BUG,而实际其相当于'A'等级的日志,故新增对其的支持;
    修复日志显示区域自定义的滚动条偶尔出现滚动紊乱的BUG;
    修复特殊情况下软件配置文件备份失败的BUG;
    修复ADB设备名中包含有'-'符号的设备无法连接的BUG;
    修复等待对话框gif动画无法显示的BUG;
    【V3.5.3】:优化版  2017/6/26  何晓龙  964195140@qq.com
    新增安装APK到指定设备的功能;
    优化软件中主线程阻塞延时等待的实现机制,避免有时报已有事件在运行的警告;
    优化ADB设备名显示格式,以缩短其显示长度;
    优化显示日志等级的控制机制,只有在启动软件时自动初始化为VERBOSE,其他任何情况都保持不变,除非手动改变;
    修复列表显示中设置和获取指定行可能存在行无效或获取对象为null而导致软件死机闪退的BUG;
    修复有时ADB设备连接断开后仍显示连接成功状态的BUG;
    修复ADB状态检测定时器与日志文件检测定时器冲突导致ADB不断重连的BUG;
    修复实时终端模式下ADB连接断开后无法自动重连的BUG;
    修复软件重启选择是或否都会重启的BUG;
    修复实时终端模式下长时间运行后内存占用逐渐增大导致内存泄漏而使软件异常闪退的BUG,通过优化代码以及主动释放频繁申请的内存来解决;
    修复实时终端模式下变换软件窗口尺寸时偶尔出现软件异常闪退的BUG;
    修复实时终端模式下updateFile()接口执行过程中出现异常后无法正常退出,并死循环在此处的BUG;
    【V3.6.3】:优化版  2017/8/22  何晓龙  964195140@qq.com
    支持对android studio自带日志工具导出的日志格式进行解析;
    新增软件自动检查是否有更新版本发布,若有,则弹窗提示下载链接;
    新增设置选项“是否启用软件安全机制”;
    优化设置界面布局,合并字体设置和文件编码格式设置;
    优化PID进程过滤器的显示,对PID号进行排序操作,便于快速定位;
    优化软件设置功能,禁止在实时终端模式下设置编码格式和系统过滤;
    优化时间过滤器控制逻辑;
    [V3.6.4]:修复版  2018/7/14  何晓龙  964195140@qq.com
    修复信息过滤器全部启用导致数组索引越界而闪退的BUG;
    修复实时模式下当前行对应的等级颜色不一致BUG;
    修复软件无法在新版win10系统上打开的BUG;
    修复win10系统中输入编辑框闪白色的BUG;
    
    
    
    展开全文
  • 为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • 为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • 为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • 为了解决这些问题,故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需...
  • 在试图找出我的应用程序失败原因的Android调试桥(ADB)困扰之下, 我注意到在日志文件中查找异常的过程*****, 在该异常中你不会在文本编辑器中看到任何未突出显示的内容。这就是为什么经过一些研究后, Andr...

    作为与Cordova一起工作的移动应用程序开发人员, 我知道调试应用程序的本机部分会很困难, 例如, 当你为应用程序创建本机插件时(在这种情况下, Android Studio无效)。在试图找出我的应用程序失败原因的Android调试桥(ADB)困扰之下, 我注意到在日志文件中查找异常的过程*****, 在该异常中你不会在文本编辑器中看到任何未突出显示的内容。这就是为什么经过一些研究后, Android Log Viewer似乎是值得在其他众多应用中突出显示的工具。 Android日志查看器是简化Android日志分析的工具。

    你可以在此处的Bitbucket官方存储库中查看该应用程序的源代码, 或直接访问下载区以下载该应用程序的最新版本。

    显示来自设备或仿真器的日志

    显示保存的日志和转储状态文件

    如果需要, 使用正则表达式搜索日志

    书签

    按标签, PID, 应用名称, 日志优先级, 消息内容过滤日志行

    过滤后的行可以隐藏, 突出显示或在单独的窗口中显示

    显示任何可用的缓冲区:主要, 系统, 事件, 无线电

    保存过滤后的行

    显示过程清单

    支持以下过滤条件:

    标签

    讯息文字

    PID和/或应用程序名称

    日志优先级

    过滤后的行可以是:

    显示(所有其他行将被隐藏)

    突出显示

    在单独的窗口中显示

    你可以输入多个标记, 应用程序名称或用逗号分隔的PID, 它们中的任何一个都会被过滤。消息, 标记和应用程序名称过滤器支持正则表达式。如果指定了多个条件, 则仅匹配所有条件的记录将被过滤。

    在Windows中的用法

    Windows中的用法非常简单, 只需下载Bitbucket存储库的”下载内容”中提供的最新版本, 然后将该文件夹提取到某个目录中即可。在本例中, 我们将使用logview-0.20-SNAPSHOT版本。使用管理员权限运行logview-0.20-SNAPSHOT \ bin \ logview.bat文件, 该应用程序应启动。通常, 应用程序将无法识别Windows中的ADB可执行文件, 因为它会随着安装的Android SDK版本的变化而变化。因此, 你需要将路径指定为首先单击ADB>配置。这将打开下一个对话框:

    6e288c43000a49e4dd4d34e2b032f918.png

    在此对话框中, 你需要指定ADB可执行文件的路径, 在本例中为C:\ USERS \ SDKCA \ APPDATA \ LOCAL \ ANDROID \ SDK \ PLATFORM-TOOLS \ ADB.EXE。现在, 你只需要将设备连接到PC, 应用程序就会自动通过ADB实时开始处理日志。基本上就是这个有用的应用程序。因此, 现在如果有人要求使用ADB实时调试cordova应用程序的工具, 你已经知道答案了。

    展开全文
  • 一个简单的python脚本来分析Android日志 设置: 下载py脚本后,修改key_words对应你的app app_marker_name = 全部或部分您的应用名称 - "com.example" key_word_agent = "您的代理日志中包含的一个词" key_word_...
  • 怎么分析android log日志

    千次阅读 2021-05-28 01:09:55
    1 log文件分类简介实时打印 的主要有: logcat main , logcat radio , logcat events ,tcpdump ,还有高通平台的还会有 QXDM 日志状态信息 的有: adb shell cat /proc/kmsg , adb shell dmesg , adb shell ...
  • Android系统的车载主机为例,面对市场用户对软件问题投诉,我们需要对离线日志进行分析,通常做法是主机把日志输出写入存储设备,通过暗门开关取出日志分析。然而拿到的日志往往是这样的: 随.
  • Android日志工具Log

    千次阅读 2022-02-21 12:34:18
    对应级别verbose,是Android日志里面级别最低的一种。 Log.d() 用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。 Log.i() 用于打印一些比较重要的数据,这些...
  • android离线日志文件打印.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android日志打印类LogUtils.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android】如何分析 ANR 日志

    千次阅读 2022-06-17 16:15:05
    应用层导致的ANR(耗时操作)系统层导致的ANR方法一当系统出现 ANR 时,设备会自动将 ANR 日志输出到 目录下,如下所示:对于这些文件,我们直接双击在 Android Studio 上打开即可。方法二执行命令:可以导出设备...
  • 主要介绍了logcat命令使用方法和查看android系统日志缓冲区内容的方法,需要的朋友可以参考下
  • Android捕获全局异常源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android日志系统有典型的android层次结构。本文指出路径,分析层次但不分析代码,这里还介绍logcat的使用和log_bg服务。 日志系统分层 1.先从驱动开始 linux-3.10/drivers/staging/android/logger.c linux-...
  • ANR日志分析全面解析
  • 在前面的文章浅谈Android系统开发中LOG的使用中,已经简要地介绍了在Android应用程序开发中Log的使用方法,在这一篇文章中,我们将更进一步地分析Logger驱动程序的源代码,使得我们对Android日志系统有一个深刻的...
  • 基于日志分析Android系统恶意行为检测.pdf
  • android日志分析与记录.

    千次阅读 2013-09-03 13:05:43
    同事分享的android日志分析与记录 1. LOG的实现架构 LOG的运行环境  下图是Android官方网站上给出的Android的Debug环境。  Android的LOG机制当然也在这个环境中运行。我们重点关注Emulator和Device上运行...
  • 主要介绍了Android SD卡上文件操作及记录日志操作的方法,涉及Android针对SD卡与文件操作的相关技巧,需要的朋友可以参考下
  • android app异常收集处理.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,002
精华内容 22,000
关键字:

android日志分析