利用dwarfdump分析线上iOS Crash Log
来源:互联网 发布:linux suspend 恢复 编辑:程序博客网 时间:2024/04/28 04:01
线上的CrashLog利用UserTrack的搜集的话一般都无法识别,比如
3 XXX 0x00126adf XXX + 10063034 XXX 0x0005ff49 XXX + 1923295 Foundation 0x33a864a1 <redacted> + 4606 CoreFoundation 0x331438f7 <redacted> + 147 CoreFoundation 0x331431f3 <redacted> + 362
那么怎么去识别这种CrashLog呢?
Mac提供了一个dwarfdump的小工具来解析这种CrashLog,需要dSYM的配合
利用dwarfdump --lookup=ADDRESS DSYMFILE
的方式查找crash出错的地址在DSYM文件中的代码段
dwarfdump --lookup 0x00103deb --arch armv7s /Users/len1988/Library/Developer/Xcode/Archives/2013-12-13/Upu\ 12-13-13\,\ 12.10\ AM.xcarchive/dSYMs/Upu.app.dSYM
我这里提供一个Python的小工具,直接输入address offset(就是上面的堆栈里+号后面的那个数字),生成一个可读的堆栈
#!/usr/bin/python# wentong@taobao.com# 13-5-3#import optparseimport osDSYM = ""def map_hex(x): return """dwarfdump --lookup=%s %s|grep -E "start_addr:|Line table file:";echo -------------------; """ % ( hex(0x00001000 + int(x)), DSYM)def add(x, y): return x + yif __name__ == '__main__': parser = optparse.OptionParser() parser.add_option("-l", "--list", dest="list", help="addresses of the backtrace") parser.add_option("-d", "--dsym", dest="dsym", help="the file of dSYM") (options, args) = parser.parse_args() if options.list is not None and options.dsym is not None: DSYM = options.dsym alist = map(map_hex, options.list.split(',')) command = reduce(add, alist) # print command os.system(command) pass else: parser.print_help()
使用方法就是
iOSCrashAnalyza.py-l1067213,1006303,192329,11307 -d/Users/zephyrleaves/crash/XXX.app.dSYM
其中l后面就是跟 3 XXX 0x00126adf XXX + 1006303
这行中的1006303 这个数字
直接输出
Line table file: 'XXXX.m' line 74, column 56 with start address 0x00000000001058bc start_addr: 0x0010581c YYYY-------------------Line table file: 'AAAA.m' line 182, column 5 with start address 0x00000000000f6aae start_addr: 0x000f659c -[AAAA BBBB:]-------------------Line table file: 'CCCC.m' line 2028, column 2 with start address 0x000000000002ff48 start_addr: 0x0002fef8 -[CCCC DDDD]-------------------Line table file: 'main.m' line 16, column 51 with start address 0x0000000000003bf6 start_addr: 0x00003be4 main-------------------
这样的可读的堆栈了
0 0
- 利用dwarfdump分析线上iOS Crash Log
- 利用dwarfdump 分析IOS crash
- iOS Crash: dwarfdump 检查 UUID
- IOS Crash Log分析
- ios分析 Crash Log
- iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol
- iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol
- 利用dwarfdump命令和dsym文件链接binary image,查看crash log中
- ios crash log 文件分析
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- ios Crash Log 分析汇总
- iOS Crash Log 分析(三)
- 套接字select模型
- phpstorm && pycharm
- 01-16 07:21:04.955: E/AndroidRuntime(366): java.lang.RuntimeException: Unable to start activity Comp
- hibernate annotation 之 注解声明
- 软件重构与设计模式
- 利用dwarfdump分析线上iOS Crash Log
- jquery mobile 中常见的问题
- Colorful XCode Console
- 不正经的程序员的进阶之路
- Unity3D占用内存太大的解决方法
- watchservice 在linux下的使用
- 实现和调用自定义扩展方法
- Java多线程-工具篇-BlockingQueue
- 未来人P57堪称最强笔记本