1. 程式人生 > >通過崩潰trace來查詢問題原因 Application received signal SIGSEGV(null)

通過崩潰trace來查詢問題原因 Application received signal SIGSEGV(null)

這裡我們以UMeng捕獲的錯誤資訊舉例:

從友盟中, 我們可能會得到如下資訊:

Application received signal SIGSEGV

(null)
(
	0   CoreFoundation                      0x359348a7 __exceptionPreprocess + 186
	1   libobjc.A.dylib                     0x37cdb259 objc_exception_throw + 32
	2   CoreFoundation                      0x35934789 +[NSException raise:format:] + 0
	3   CoreFoundation                      0x359347ab +[NSException raise:format:] + 34
	4   NxxMovie                          0x1153b9
_mh_execute_header + 1131449 5 libsystem_c.dylib 0x32d407e3 _sigtramp + 38 6 NxxMovie 0x390fb _mh_execute_header + 229627 7 CoreFoundation 0x358931fb -[NSObject performSelector:withObject:] + 42 8 NxxMovie 0x175a5
_mh_execute_header + 91557 9 CoreFoundation 0x358931fb -[NSObject performSelector:withObject:] + 42 10 Foundation 0x35457747 __NSThreadPerformPerform + 350 11 CoreFoundation 0x35908ad3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14 12 CoreFoundation 0x3590829f __CFRunLoopDoSources0 + 214 13 CoreFoundation 0x35907045 __CFRunLoopRun + 652 14 CoreFoundation 0x3588a4a5 CFRunLoopRunSpecific + 300 15 CoreFoundation 0x3588a36d CFRunLoopRunInMode + 104 16 GraphicsServices 0x37526439 GSEventRunModal + 136 17 UIKit 0x33396cd5 UIApplicationMain + 1080 18 NxxMovie 0x31b7
_mh_execute_header + 8631 19 NxxMovie 0x3150 _mh_execute_header + 8528 ) dSYM UUID: FF67F6D3-C71C-3A7D-9C4C-C4FFBF8EEEB9 CPU Type: armv7 Slide Address: 0x00001000 Binary Image: NxxMovie Base Address: 0x000f4000
由於這類的崩潰資訊通常難以重現, 沒有任何的重現步驟,所以我們得找到釋出該版本時的原始程式碼,可能會需要回朔到以前的SVN或者Git版本。

然後找到當時上傳程式碼時使用的DYSM檔案,這檔案通常在.xcarchive檔案中。 右鍵該檔案, 然後通過Terminal工具cd到

cd /Users/heqin/Downloads/xxxMovie2.0.0_apps_0605_2104\ 13-6-5\ 下午9.02.xcarchive/dSYMs/xxxMovie.app.dSYM/Contents/Resources/DWARF

注意:1。對於成功生成archvie的專案, 在這個archive的包中, 是可以通過顯示包內容, 看到DSYMs資料夾和一個products資料夾, 繼續顯示DSYMs資料夾下,可以看到一個xxx.app.DSYM檔案,繼續對它顯示包內容,可以看到Contents/Resources/DWARF/xxxx檔案, 這個檔案是編譯後的二進位制檔案,通過它可以進行反編譯,從而找到二進位制對應的原始碼位置。

2。 在xcode中,archive成功後, 會在Organizer介面中的Archives下, 可以看到所有的archive檔案, 右鍵Show in Finder可以找到這個檔案。

然後執行atos -arch armv7 -o xxxMovie 0x1153b9. 就可以看到這處記憶體地址反編譯回來的原始碼行。

可以有效地幫助分析原因。