2015-06-09 188 views
3

我們從Flurry下面收到了堆棧跟蹤。它是從用戶設備捕獲的,我們無法追蹤它。它沒有列出我們代碼庫中的行......我們如何解決堆棧跟蹤並找出問題?調試堆棧跟蹤?

完整的堆棧跟蹤:

0 libGPUSupportMercury.dylib   0x34d068f6 <redacted> + 9 
1 IMGSGX535GLDriver     0x2f04050f <redacted> + 122 
2 GLEngine       0x32515a01 <redacted> + 172 
3 GLEngine       0x3251590f _gliPresentViewES + 134 
4 OpenGLES       0x325200cd <redacted> + 64 
5 SpriteKit       0x32990191 -[SKView _renderContent] + 1216 
6 libdispatch.dylib     0x3af1381f <redacted> + 22 
7 libdispatch.dylib     0x3af25dd7 <redacted> + 26 
8 SpriteKit       0x3298fca3 -[SKView renderContent] + 82 
9 SpriteKit       0x3298d633 <redacted> + 130 
10 SpriteKit       0x329b00eb -[SKDisplayLink _callbackForNextFrame:] + 254 
11 QuartzCore       0x32766df3 <redacted> + 98 
12 QuartzCore       0x32766b9d <redacted> + 344 
13 IOMobileFramebuffer     0x354df75d <redacted> + 104 
14 IOKit        0x30f69451 _IODispatchCalloutFromCFMessage + 248 
15 CoreFoundation      0x3023eef9 <redacted> + 136 
16 CoreFoundation      0x30249ab7 <redacted> + 34 
17 CoreFoundation      0x30249a53 <redacted> + 346 
18 CoreFoundation      0x30248227 <redacted> + 1398 
19 CoreFoundation      0x301b2f4f _CFRunLoopRunSpecific + 522 
20 CoreFoundation      0x301b2d33 _CFRunLoopRunInMode + 106 
21 GraphicsServices     0x350b7663 _GSEventRunModal + 138 
22 UIKit        0x32afe16d _UIApplicationMain + 1136 
23 <OurClassName>        0x000af494 __mh_execute_header + 345236 
24 libdyld.dylib      0x3af38ab7 <redacted> + 2 
+1

這是_too_編輯!這是在精靈場景運行時發生的。這就是它所說的。 – matt

回答

0

首先,你需要得到的基址每個左側(您的應用程序,再加上每一個系統庫)中列出的模塊,因爲地址空間佈局隨機化(ASLR)。許多應用程序內堆棧跟蹤報告工具(如PLCrashReporter)可以將這些信息存儲在他們的報告中。

接下來,您需要獲取每個模塊的調試符號。對於您的應用程序,當您構建時,它應該生成一個.dSym文件,其中包含允許您從地址獲取方法和行號的信息。您需要確保獲得與產生崩潰的構建對應的確切.dSym,因爲每個構建都不相同。

對於系統庫,第一次使用特定版本的OS將設備連接到Xcode時,Xcode會下載調試符號。它們存儲在/Users/<yourusername>/Library/Developer/Xcode/iOS DeviceSupport/中。請注意,有時OS的版本將有多個版本(測試版或不同版本的不同設備);您需要獲得發生崩潰的操作系統版本,這意味着您的堆棧跟蹤還需要存儲該信息。它也需要是Xcode已經看到的操作系統版本,否則它將不會下載信息。對於系統模塊,您只會獲得函數名稱而不是行號(由於它們不是開源的,因此無論如何都不會有用)。

然後,您可以使用工具atos,給它一個地址,一個加載地址(問題模塊的基地址),架構(對於包含多個架構代碼的應用程序),它會輸出該地址的符號信息。