IOS開發(fā)自動化工具之python崩潰日志解析腳本

自動化工具之python崩潰日志解析腳本

很多測試人員在測試途中,或者開發(fā)者在自測的途中,會遇到APP crash的情況。
一般的bug,一個合格的測試可以給出明確的重現(xiàn)步驟讓開發(fā)者清晰地知道bug原因;
也有不少bug,很多時候是偶現(xiàn)的,很可能無法再次重現(xiàn)出來,無法重現(xiàn)出來的bug是開發(fā)者頭疼的,測試一般會給出bug的截圖和重現(xiàn)步驟;
而一般crash是比較嚴重的問題,這個時候崩潰日志就尤為重要了,把崩潰日志send給開發(fā)人員,如此才能讓開發(fā)者快速定位到錯誤的原因和位置。

舊的解析崩潰日志的方式

在以前我們是這么解析崩潰日志的

  1. 桌面新建一個Crash文件夾
  2. 去目錄/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/ 下把symbolicatecrash文件拷貝到我們剛才的Crash文件夾中
  3. 找到潰程序?qū)?yīng)的.dSYM文件,拷貝到我們剛才的Crash文件夾中 比如叫test.dSYM
  4. 把測試人員給我們的崩潰日志也當?shù)繡rash文件夾中,比如叫1.crash
  5. 打開終端 CD到Crash文件夾中 執(zhí)行命令 ./symbolicatecrash 1.crash test.dSYM > 1.log

這樣解析好的日志就到了1.log文件中,我們用文本編輯器只需打開即可查看

但是有的時候,一不小心放進去的符號文件版本不對應(yīng),那么解析出來的1.log和原來的1.Crash內(nèi)容是一樣的,這時候我為了匹配崩潰日志和符號文件的版本,還要使用下面的命令

  1. 首先查看dSYM文件的UUID 才剛才的Crash文件夾中執(zhí)行dwarfdump --uuid test.dSYM
    終端會輸出類似這樣的信息

    UUID: F28A8BE6-4B0B-38C9-9F28-829B4121C88B (armv7) test.dSYM/Contents/Resources/DWARF/*******
    UUID: C8424837-BC0F-3F9F-A109-A42271C3E14E (arm64) test.dSYM/Contents/Resources/DWARF/*******

2.用文本編輯器打開1.crash,拉到其中一處Binary Images:的地方,如圖找到UUID

Snip20180104_1.png

  1. 若步驟1中包含步驟2中的uuid,那么是匹配的,能正確解析崩潰日志,否則會解析失敗

用自己的腳本去解析

前面的步驟去解析崩潰日志有點繁雜,所以寫了一個python腳本,用于一步解析崩潰日志并校驗uuid

廢話不多說,上代碼(decode.py)

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
import sys

def txt_wrap_by(start_str, end, html):
    start = html.find(start_str)
    if start >= 0:
        start += len(start_str)
        end = html.find(end, start)
        if end >= 0:
            return html[start:end].strip()

def getCrashFileUUID(filePath):
    f = open(filePath)             # 返回一個文件對象
    line = f.readline()             # 調(diào)用文件的 readline()方法
    uuid = ''
    while line:
        if line.startswith('Binary Images:'):
            desLine = f.readline()
            uuid = txt_wrap_by("<",">",desLine)
            break
        line = f.readline()
    f.close()
    return uuid.upper()

def getTagFileUUID(filePath):
    ines = os.popen('dwarfdump --uuid ' + filePath).readlines()
    uuids = []
    for item in ines:
        uuid = txt_wrap_by('UUID:', ' (', item)
        uuid = uuid.replace('-','').upper()
        uuids.append(uuid)
    return uuids

def getDevDir():
    return os.popen('xcode-select -p').readlines()[0].replace('\n', '')

def getSymbolicatecrashPath():
    return getDevDir().replace('Developer', '') + 'SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash'



if len(sys.argv) <= 2:
    print "sorry! you must input 2 arg like this:"
    print "\t python decode.py 1.crash xxxx.app.dSYM"
    exit(0)

crashFilePath = sys.argv[1]
dsymFilePath = sys.argv[2]
print "crashFilePath:" + crashFilePath
print "dsymFilePath:" + dsymFilePath


outPutFilePath = crashFilePath + ".log"

#檢查uuid是否匹配
crashUUID = getCrashFileUUID(crashFilePath)
tagUUIDS = getTagFileUUID(dsymFilePath)
if crashUUID in tagUUIDS:
    print "UUID match success! " + crashUUID
else:
    print  "UUID not match"
    exit(0)

#設(shè)置環(huán)境變量
cmd = "export DEVELOPER_DIR=\"" + getDevDir()+"\"\n"

symbolicatecrashPath = getSymbolicatecrashPath()

cmd +=  symbolicatecrashPath + " " + crashFilePath + " " + dsymFilePath + ' > ' + outPutFilePath + '\n'
cmd += 'open '+outPutFilePath
print os.popen(cmd)

這段腳本在解析崩潰日志之前自己做了UUID的校驗,若UUID不匹配則不取解析,直接提示UUID不匹配

運行環(huán)境

  • mac OS系統(tǒng)
  • python 2.7(系統(tǒng)自帶的版本)
  • 終端執(zhí)行

使用步驟

  1. 建立一個Crash文件夾
  2. 將崩潰日志1.crash,符號文件test.dSYM放到Crash文件夾中
  3. 終端cd到Crash文件夾中,執(zhí)行如果解析成功,終端顯示如下
    dsymFilePath:test.dSYM
    UUID match success! 2DD2DDA45509307BBABD93ADCF36492A

解析后的日志寫到了1.log中,這里輸出的文件名不用寫
如果UUID不匹配,提示如下

dsymFilePath:test.dSYM
UUID not match
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 開發(fā)的App或者游戲提交審核后,偶爾會收到測試反饋的消息,說應(yīng)用崩潰了,bug偶爾出現(xiàn),難以找到確定的重現(xiàn)方法。怎...
    sky_kYU閱讀 1,520評論 0 0
  • 前言 崩潰是讓發(fā)人員比較頭痛的事情,app崩潰了,說明代碼寫的有問題,這時如何快速定位到崩潰的地方很重要。調(diào)試階段...
    進無盡閱讀 2,186評論 0 9
  • 該文章屬于劉小壯原創(chuàng),轉(zhuǎn)載請注明:劉小壯[http://www.itdecent.cn/u/2de707c93d...
    劉小壯閱讀 38,088評論 45 121
  • 前言 iOS崩潰是讓iOS開發(fā)人員比較頭痛的事情,app崩潰了,說明代碼寫的有問題,這時如何快速定位到崩潰的地方很...
    齊滇大圣閱讀 65,917評論 29 443
  • 寫在前面:本文會在最開頭將蘋果官方的文檔Understanding and Analyzing Applicati...
    小小外星人閱讀 26,591評論 23 130

友情鏈接更多精彩內(nèi)容