日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用.dSYM和.app文件准确定位Crash位置

發布時間:2024/7/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用.dSYM和.app文件准确定位Crash位置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當發布到iPhone上的應用程序Crash之后,iPhone會自動生成一個Crash Log(*.crash),這個文件包含了一些有用的調試信息,但對于堆棧,它只記錄的函數地址,而無法顯示函數名。函數名保存在一個叫dSYM的二進制文件中,即一個調試符號表文件。

首先,確保在release(Ad Hoc或者App Store)一個版本時,保存了對應的xxx.app和xxx.dSYM文件。

其次,驗證xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。

驗證方法:

1)查看xxx.app的uuid。

[plain]?view plaincopyprint?
  • $?dwarfdump?--uuid?mobileguard.app/mobileguard??
  • 2)查看xxx.dSYM的uuid。

    [plain]?view plaincopyprint?
  • $?dwarfdump?--uuid?mobileguard.app.dSYM/Contents/Resources/DWARF/mobileguard??
  • 3)xxx.crash。

    上面兩個UUID必須一樣,而且必須跟Crash Log里面的UUID一致。打開Crash Log文件,在”Binary Images:”段中,YourApp后面的尖括號內的字符串就是UUID了。? crash log uuid : armv7 ?<1dd5eb047491310f88cb7b1d7f61275c> /var/mobile/Applications/581404D9-FF06-455F-8251-846D41D18B40/

    Note:

    在這之前,需要找到對應的app和dSYM文件。這兩個文件是在后綴為.archive的文件中,在我的機器(Mac OS 10.9.1,Xcode5.0.2)上,.archive文件在“/Users/mikelin/Library/Developer/Xcode/Archives/”文件夾下對應的日期文件夾中,也可以從Xcode > Organizer > Archive 下找到對應的Archive包。

    確保三者uuid一致以后,用symbolicatecrash工具生成易讀的日志信息。


    首先找到symbollicatecrash工具在哪里:

    find /Applications/Xcode.app -name symbolicatecrash -type f

    你會找到:

    /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash


    方法一:使用.crash文件和dsym文件

    先準備環境:

    1)將symbolicatecrash文件拷貝到和那三個文件的同級目錄,此方法不需要.app文件

    2)設置xcode?DEVELOPER_DIR。

    [plain]?view plaincopyprint?
  • export?DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"??
  • 然后執行命令:

    [plain]?view plaincopyprint?
  • symbolicatecrash?m.crash?mobileguard.app.dSYM?>?n.crash??
  • 轉載:http://blog.csdn.net/jinzhu117/article/details/20615991


    方法二:使用局部崩潰信息和.app文件

    如果沒有完整的.crash格式的崩潰文件,只有局部的崩潰信息,如下:

    [plain]?view plaincopyprint?
  • Thread 0 Crashed:
    0 ??libobjc.A.dylib ??????????????0x00003ec0 objc_msgSend + 24
    1 ??MyApp ? ? ? ? ? ? ? ? ? ? ? ? ?0x000036d2 0×1000 + 9938?
  • 其中:0x000036d2為棧地址,0×1000為偏移量

    我們可以在控制臺使用atos命令,解析出內存地址,此方法不需要.dsym文件

    [plain]?view plaincopyprint?
  • $?atos -o MyApp.app/MyApp -arch arm64(崩潰日志中標明的架構) -l?0×1000(偏移量)?0x000036d2(棧地址)?
  • 結果示例:__24-[MyApp initBase]_block_invoke.243 (in?MyApp) (MyAppStart.m:286)?
  • 總結

    以上是生活随笔為你收集整理的利用.dSYM和.app文件准确定位Crash位置的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。