2012-04-13 69 views
4

我收到來自應用程序崩潰報告,但Xcode不是能夠symbolicate特定於我的應用程序的符號:Symbolicating崩潰日誌的應用程序與靜態庫

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x32c43a1c __pthread_kill + 8 
1 libsystem_c.dylib    0x33a0a3b4 pthread_kill + 52 
2 libsystem_c.dylib    0x33a02bf8 abort + 72 
3 libsystem_c.dylib    0x33a306d4 __assert_rtn + 140 
4 MyApplication     0x0000dd54 0x9000 + 19796 
5 MyApplication     0x0000dbda 0x9000 + 19418 
6 MyApplication     0x000103f6 0x9000 + 29686 
7 MyApplication     0x0001035e 0x9000 + 29534 
8 MyApplication     0x0000f3cc 0x9000 + 25548 
9 MyApplication     0x00025d1e 0x9000 + 118046 
10 CoreFoundation     0x35847efc -[NSObject(NSObject) performSelector:withObject:] + 16 
11 Foundation      0x36eec7a2 __NSThreadPerformPerform + 262 
12 CoreFoundation     0x358b1a72 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6 
13 CoreFoundation     0x358b3758 __CFRunLoopDoSources0 + 376 
14 CoreFoundation     0x358b44e4 __CFRunLoopRun + 224 
15 CoreFoundation     0x35844ebc CFRunLoopRunSpecific + 224 
16 CoreFoundation     0x35844dc4 CFRunLoopRunInMode + 52 
17 GraphicsServices    0x3446b418 GSEventRunModal + 108 
18 GraphicsServices    0x3446b4c4 GSEventRun + 56 
19 UIKit       0x344a2d62 -[UIApplication _run] + 398 
20 UIKit       0x344a0800 UIApplicationMain + 664 
21 MyApplication     0x0000b174 main (main.m:14) 
22 MyApplication     0x0000b124 0x9000 + 8484 

除了在主要線路。米我知道我的dSYM文件仍然在Xcode的存檔中。我嘗試過使用命令行直接引用這些調試符號,但每次都得到相同的結果。我嘗試過使用atos直接查找符號,但無法找到它。我通過比較UUID證實它是正確的dSYM。

它每次都找到main.m,所以它看起來像它的一半工作,但只是無法找到其他任何東西。

我在這個應用程序中使用靜態庫 - 是否有可能在靜態庫中發生崩潰?該調試信息是否在一組獨立的調試符號中?它說,負責任的圖書館是我的應用程序......如果它實際上是造成這次崩潰的責任,它會說靜態庫的名稱嗎?

謝謝!

+0

對於一個可能的答案見:http://stackoverflow.com/questions/26461500/export-symbols-of-static-library-when-used-for-ios-app-creation?rq=1 – benzado 2015-03-09 22:56:42

回答

4

靜態庫鏈接到您的應用程序可執行文件中,因此鏈接後您將無法識別該代碼的原始源。因此,它將始終將您的應用程序命名爲源二進制文件。

由於您包含的靜態庫,這些框架很可能沒有得到符號化。如果靜態庫中沒有符號,但會被刪除,則會發生這種情況。靜態庫版本構建經常發生,其中默認設置與應用程序相同,以去除符號。 (對於應用程序,這是正確的事情!)

在這種情況下,符號不會被複制到dSYM中,因爲它無法在靜態庫中找到它們。

+0

嗯,我其實有靜態庫的源代碼 - 所以如果我停止從靜態庫中剝離調試符號,它會將它們包含在應用程序的dSYM中? – Daniel 2012-04-14 16:19:29

+0

是的。只需嘗試一下。將靜態庫中的方法添加到可以故意使應用程序崩潰的方法中。從應用程序二進制文件中調用它。然後檢查崩潰報告。 – Kerni 2012-04-14 22:07:27

+0

謝謝!我很感激幫助。 – Daniel 2012-04-15 05:30:36

相關問題