友盟上的崩溃地址转换为符号

使用

./parseAddress.sh errorPath dSYMPath
Example:

./parseAddress.sh ~/errorInfo.txt ~/CMRead.app.dSYM

errorPath内容

Example:

*** -[__NSCFString rangeOfString:options:range:locale:]: nil argument
(null)
(
    0   CoreFoundation                      0x000000018fd441d8 <redacted> + 148
    1   libobjc.A.dylib                     0x000000018e77c55c objc_exception_throw + 56
    2   CoreFoundation                      0x000000018fd44108 <redacted> + 0
    3   Foundation                          0x00000001907325ac <redacted> + 352
    4   CMRead                              0x1001ac228 CMRead + 1753640
    5   CMRead                              0x100129b6c CMRead + 1219436
    6   UIKit                               0x0000000195ed03d4 <redacted> + 716
    7   UIKit                               0x0000000195ed0604 <redacted> + 80
    8   UIKit                               0x0000000195ebdbac <redacted> + 2304
    9   UIKit                               0x0000000195ed5668 <redacted> + 116
    10  UIKit                               0x0000000195c71b14 <redacted> + 176
    11  UIKit                               0x0000000195b8a54c <redacted> + 1196
    12  QuartzCore                          0x000000019305240c <redacted> + 148
    13  QuartzCore                          0x00000001930470e8 <redacted> + 292
    14  QuartzCore                          0x0000000193046fa8 <redacted> + 32
    15  QuartzCore                          0x0000000192fc3c64 <redacted> + 252
    16  QuartzCore                          0x0000000192feb0d0 <redacted> + 512
    17  QuartzCore                          0x0000000192febaf0 <redacted> + 120
    18  CoreFoundation                      0x000000018fcf17dc <redacted> + 32
    19  CoreFoundation                      0x000000018fcef40c <redacted> + 372
    20  CoreFoundation                      0x000000018fcef89c <redacted> + 1024
    21  CoreFoundation                      0x000000018fc1e048 CFRunLoopRunSpecific + 444
    22  GraphicsServices                    0x00000001916a1198 GSEventRunModal + 180
    23  UIKit                               0x0000000195bf8628 <redacted> + 684
    24  UIKit                               0x0000000195bf3360 UIApplicationMain + 208
    25  CMRead                              0x1000d689c CMRead + 878748
    26  libdyld.dylib                       0x000000018ec005b8 <redacted> + 4
)

dSYM UUID: 098473FA-1928-3623-AFD7-A83E0BA6BC09
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: CMRead
Base Address: 0x0000000100054000

parseAddress.sh

parseAddress.sh文件内容

#!/bin/bash
##author: zhoujie<13456774460@139.com>
##用来把友盟中的错误地址转换为符号

##调试开关
#set -x

progname=${0##*/} ## Get the name of the script without its path
folder=${0%/*}
#cd $folder && echo "cd folder:" $folder

if [[ ${#} < 2 ]]; then
    echo "USAGE: $progname errorPath dSYMPath"
fi



##变量定义
error_file=${1:-errorInfo.txt}
dSYMPath=${2:-"/Users/zhoujie/Downloads/CMRead.app.dSYM"}
result_file=${error_file}_parsed.txt


##提取cpu架构
arch=$( grep "CPU Type: arm[0-9]*"  ${error_file} | grep -o "arm[v]*[0-9]*" )
echo "CPU Type: " $arch

##提取UUID
uuid_in_error=$( grep "dSYM UUID: "  ${error_file} | grep -o -E "[0-9A-F]+-[0-9A-F]+-[0-9A-F]+-[0-9A-F]+-[0-9A-F]+" )
echo "uuid_in_error: " $uuid_in_error

uuid_in_dSYM=$(dwarfdump --arch=$arch --uuid $dSYMPath | grep -o -E "[0-9A-F]+-[0-9A-F]+-[0-9A-F]+-[0-9A-F]+-[0-9A-F]+" )
echo "uuid_in_dSYM:  " $uuid_in_dSYM

##比较UUID
if [[ $uuid_in_error != $uuid_in_dSYM ]]; then
    printf "uuid is not match:\n"
    printf "\tuuid_in_erro: %s\n" $uuid_in_error
    printf "\tuuid_in_dSYM: %s\n" $uuid_in_dSYM
    exit 1;
fi


##提取Binary Image
binaryImage=$( grep -o "Binary Image: [0-9a-zA-Z]*"  ${error_file} )
binaryImage=${binaryImage##"Binary Image: "}
echo "Binary Image: " $binaryImage


##提取错误地址列表
addresses=$(grep $binaryImage ${error_file} | grep -o "0x[0-9a-f]*")

##清空文件
> $result_file 

##错误地址转换为符号
for i in $addresses; do
    {
        printf "addresses: %s\n" $i  
        dwarfdump --arch=$arch --lookup $i "$dSYMPath" | grep "AT_name\|Line table file"
        if [[ $? -ne 0 ]]; then
            atos -o "$dSYMPath"/Contents/Resources/DWARF/$binaryImage -arch $arch $i
         fi 
        printf "\n\n"       
    } >> $result_file   
done


##附上原错误信息
printf "\n\n" >> $result_file 
cat $error_file >> $result_file 


##打开文件
open $result_file
echo "解析结果:$PWD/$result_file"


最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容