iOS崩溃地址和dSYM查找

dSYM

  • 编译时添加选项:DWARF with dSYM File,在编译打包完成之后就会生成调试符号文件(Mach-O文件
  • 文件查找:找到.xcarchive文件→show package contents→...一直到DWARF→工程二进制文件

atos命令

有了dSYM文件,就可以使用atos命令查找到具体代码行出现奔溃信息的地方

atos [-o executable] [-l loadAddress] [-arch architecture] [address ...]
#-arch 选择框架arm64/arm32/x86_64

举例:

atos -arch arm64 -o CallWatch -l 0x0000000100000000 0x1000e51f8

加载地址

从堆栈信息中,无法获取到加载地址(加载地址每次启动APP,都有所不同),可以添加函数

uintptr_t get_load_address(void) {
    const struct mach_header *exe_header = NULL;
    for (uint32_t i = 0; i < _dyld_image_count(); i++) {
        const struct mach_header *header = _dyld_get_image_header(i);
        if (header->filetype == MH_EXECUTE) {
            exe_header = header;
            break;
        }
    }
    
    //返回值即为加载地址
    return (uintptr_t)exe_header;
}

堆栈地址(stack addr) - 加载地址(load addr) = 符号地址(symbol addr)

所以使用查询命令(lookup)时,需要先找到基地址,然后减去该值,才是符号地址;

所以在使用atos时,从堆栈中获取的地址,需要减去基地址,才是符号地址。比如,有一处堆栈信息

stack = "BaseAddress:0x10533a000
    0   CoreFoundation                      0x0000000108f0c113 __exceptionPreprocess + 147
    1   libobjc.A.dylib                     0x000000010f0bcf41 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000108f112f2 +[NSException raise:format:arguments:] + 98
    3   Foundation                          0x0000000109f21d69 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 193
    4   UIKit                               0x000000010c179209 -[UITableView _endCellAnimationsWithContext:] + 19416
    5   UIKit                               0x000000010c194075 -[UITableView endUpdates] + 75
    6   XXX                                 0x0000000105dfbca2* -[SMSCollectionViewController openStateTableView:commitEditingStyle:forRowAtIndexPath:] + 866
    7   XXX                                 0x0000000105dfa8bc -[SMSCollectionViewController tableView:commitEditingStyle:forRowAtIndexPath:] + 220
    8   UIKit                               0x000000010c1b8a5f -[UITableView _animateDeletionOfRowAtIndexPath:] + 177
    9   UIKit                               0x000000010c1c1a59 __82-[UITableView _contextualActionForDeletingRowAtIndexPath:usingPresentationValues:]_block_invoke + 59
    10  UIKit                               0x000000010c6fbd67 -[UIContextualAction executeHandlerWithView:completionHandler:] + 174
    11  UIKit                               0x000000010c9e9374 -[UISwipeOccurrence _performSwipeAction:inPullview:swipeInfo:] + 702
    12  UIKit                               0x000000010c9eabd1 -[UISwipeOccurrence swipeActionPullView:tappedAction:] + 112
    13  UIKit                               0x000000010cacded2 -[UISwipeActionPullView _tappedButton:] + 138
    14  UIKit                               0x000000010c056972 -[UIApplication sendAction:to:from:forEvent:] + 83
    15  UIKit                               0x000000010c1d5c3c -[UIControl sendAction:to:forEvent:] + 67
    16  CoreFoundation                      0x0000000108e9036c __invoking___ + 140
    17  CoreFoundation                      0x0000000108e90240 -[NSInvocation invoke] + 320
    18  XXX                                 0x0000000105f232c4 __ASPECTS_ARE_BEING_CALLED__ + 4452
    19  CoreFoundation                      0x0000000108e8ecd8 ___forwarding___ + 760
    20  CoreFoundation                      0x0000000108e8e958 _CF_forwarding_prep_0 + 120
    21  UIKit                               0x000000010c1d5f59 -[UIControl _sendActionsForEvents:withEvent:] + 450
    22  UIKit                               0x000000010c1d4e86 -[UIControl touchesEnded:withEvent:] + 618
    23  UIKit                               0x000000010c646bad _UIGestureEnvironmentSortAndSendDelayedTouches + 5560
    24  UIKit                               0x000000010c640a4d _UIGestureEnvironmentUpdate + 1506
    25  UIKit                               0x000000010c64041f -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 484
    26  UIKit                               0x000000010c63f4cb -[UIGestureEnvironment _updateGesturesForEvent:window:] + 288
    27  UIKit                               0x000000010c0cdf14 -[UIWindow sendEvent:] + 4102
    28  UIKit                               0x000000010c071365 -[UIApplication sendEvent:] + 352
    29  XXX                                 0x00000001

与XXX有关的奔溃地址:0x0000000105dfbca2,需要减去基地址(BaseAddress:0x10533a000)+偏移地址(Slide Address:)0x100000000=0x100ac1d42, 从而查询命令为:

atos arch arm64 -o CallWatch 0x100ac1d42

或者(UMeng平台里面可直接复制,但是需要在编译版本的电脑里面才能找得到)

export dSYMPath="$(find ~/Library/Developer/Xcode -iname '*.dSYM' -print0 | xargs -0 dwarfdump -u  | grep B76812D2-4F7A-3A7D-89E2-BBA3B20ADA03 | sed -E 's/^[^/]+//' | head -n 1)";
dwarfdump --arch=arm64 --lookup 0x100ac1d42 "$dSYMPath"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容