2013-09-25 46 views
1

我在App Store中被賦予以下錯誤消息的應用程序:從哪裏開始尋找的main.m線SIGSEGV的原因15

SIGSEGV中的main.m線15

int main(int argc, char *argv[]) 
{ 
@autoreleasepool { 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <-- line 15 
} 
} 

相關用戶的具體情況是:

enter image description here

,這是堆棧跟蹤:

0 libobjc.A.dylib 0x3b446b26 0x3b443000 + 15142 
1 UIKit 0x3376c03b 0x33549000 + 2240571 
2 UIKit 0x3376bf43 0x33549000 + 2240323 
3 UIKit 0x3367132b 0x33549000 + 1213227 
4 UIKit 0x33724253 0x33549000 + 1946195 
5 UIKit 0x335d4971 0x33549000 + 571761 
6 UIKit 0x3354c473 0x33549000 + 13427 
7 CoreFoundation 0x30dae1d5 <redacted> + 20 
8 CoreFoundation 0x30dabb79 <redacted> + 284 
9 CoreFoundation 0x30dabebb <redacted> + 730 
10 CoreFoundation 0x30d16ce7 CFRunLoopRunSpecific + 522 
11 CoreFoundation 0x30d16acb CFRunLoopRunInMode + 106 
12 GraphicsServices 0x359e4283 GSEventRunModal + 138 
13 UIKit 0x335b8a41 UIApplicationMain + 1136 
14 SalonBook 0x0006c0f5 main (main.m:15) + 28917 

從哪裏開始尋找這個錯誤的原因的任何想法?

+0

您是否在代碼上運行靜態分析器來查找內存管理問題? – bneely

+0

不...但使用XCode 5,我已經在Debug Navigator中觀察了內存的使用情況,並沒有什麼不同尋常(6.3 MB)。根據堆棧跟蹤,它看起來甚至沒有進入第一個視圖控制器。 – SpokaneDude

+0

appMemTotal的度量單位是什麼,它是42.4 ...? – bneely

回答

1

您的應用觸及segmentation fault或內存訪問衝突。根據我在過去一年左右從我自己的設備上看到的拋棄日誌,42 MB內存佔用量聽起來很大。我不知道你的應用程序,它在內存中是什麼樣的資源,等等有一系列的內存問題你的應用程序一樣東西:

  • 內存簡單的過度需求不能得到滿足(沒有交換文件)
  • 保留週期造成不必要的內存壓力
  • 無效指針訪問

的目標,我建議您與您的應用程序實現:

  • 實現零個警告由分析報告
  • 在什麼情況下的內存分配獲得高
  • 識別確定和消除保留週期
  • 標識在內存不必要的資源和擺脫他們
  • 確定資源比他們應該更大並且返工

調查此問題的出發點是通過產品> Analyze菜單項。這將檢測並報告存儲器訪問錯誤的已知原因。如果您沒有使用自動引用計數,它也會報告潛在的內存泄漏。在撰寫本文時,我不相信分析儀有助於保留週期。

接下來,只需在設備上使用您的應用程序,通過Xcode運行並觀察內存佔用情況。當您瀏覽應用程序和/或使用更多功能時,內存使用量是否增長並且不會縮小?確定導致內存佔用量大幅增加的任何情況。再次,我不知道你的應用程序,所以我不知道現在如何提供更具體的指導。

如果您在Apple的Instruments應用程序中使用分配工具,則保留週期可能很明顯。您可以通過產品>配置文件菜單項運行此操作。儀器允許您按對象類型,大小,數量等瀏覽分配,並允許您查看單個對象的調用堆棧,以便了解它們是如何創建的。您可能會發現某些分配會跳出來,例如「這是4 MB的圖像?」或者「爲什麼應用程序有8000個NSArray對象?」儀器幫助的另一項任務是提供幾代人。 「標記生成」按鈕可讓您在工作流程的關鍵點放置標記。在執行工作流程之前和之後,您會看到該時間段內的內存增長量,並且您可以深入查看調用堆棧以查看分配的內容和方式。

如果您有任何疑問,請留下評論,我會盡快跟進。

+0

我想我發現了內存泄漏......我有各種UIPopovers;出於某種原因,ARC不會釋放存儲空間。我該怎麼做才能解決這個問題?我注意到它主要發生在德國......也許是翻譯?我檢查那個... – SpokaneDude

+0

它可能是一個保留週期。一個UIViewController通常會保留它創建的UIPopoverController,以便稍後解散它。如果UIPopoverController反過來保留了UIViewController,或者沒有被解僱,那就是一個問題。我無法猜測爲什麼德國會受到特別影響。 – bneely