2013-07-31 26 views
5

Tôi đang làm việc trên ứng dụng thực đầu tiên của mình bằng Xamarin.IOS. Hầu hết các lần ứng dụng hoạt động tuyệt vời, nhưng một vài lần một ngày nó đổ vỡ với stacktrace sau:Tìm nguyên nhân của SIGSEGV trong ứng dụng Xamarin.iOS

mono-rt: Stacktrace: 
mono-rt: at <unknown> <0xffffffff> 
mono-rt: at (wrapper managed-to-native) MonoTouch.Foundation.NSObject.monotouch_release_managed_ref (intptr) <IL 0x00023, 0xffffffff> 
mono-rt: at MonoTouch.Foundation.NSObject.ReleaseManagedRef() [0x00000] in /Developer/MonoTouch/Source/monotouch/src/Foundation/NSObject.cs:98 
mono-rt: at MonoTouch.Foundation.NSObject/NSObject_Disposer.Drain (MonoTouch.Foundation.NSObject) [0x00062] in /Developer/MonoTouch/Source/monotouch/src/shared/Foundation/NSObject2.cs:545 
mono-rt: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 
mono-rt: at <unknown> <0xffffffff> 
mono-rt: at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff> 
mono-rt: at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
mono-rt: at Diet52App.Application.Main (string[]) [0x00008] in /Users/danielnordmark/Projects/Diet52App/Diet52App/Main.cs:16 
mono-rt: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 

mono-rt: 
Native stacktrace: 


mono-rt: 
================================================================= 
Got a SIGSEGV while executing native code. This usually indicates 
a fatal error in the mono runtime or one of the native libraries 
used by your application. 
================================================================= 

Tôi đoán là một số đối tượng bị thu gom rác trước khi tôi đang cố gắng sử dụng nó. Nhưng tôi cảm thấy hơi lạc lõng làm thế nào để tìm ra khi nào và ở đâu trong mã của tôi điều này vui vẻ.

Làm cách nào để tìm ra vấn đề ở đâu? Bất kỳ sự giúp đỡ nào cũng được đánh giá cao!

Trả lời

4

Sự cố có vẻ liên quan đến UITableViewController của tôi, tôi đã có một lớp cơ sở và hai phiên bản khác nhau. Một cuộc xung đột giữa hai kết quả này gây ra lỗi SIGSEGV.

tôi quản lý để theo dõi các vấn đề nhờ vào câu trả lời này https://stackoverflow.com/a/6769885/248905

Việc sửa đổi duy nhất mà tôi đã phải thực hiện là để bọc các mã với InvokeOnMainThread như thế này,

Cập nhật: tôi cập nhật giải pháp của tôi sau khi Tôi đã liên lạc với Rolf tại Xamarin, sửa lỗi chính xác là đặt mã trong ViewDidDissapear thay vì Vứt bỏ.

public override void ViewDidDisappear (bool animated) 
{ 
    searchController.SearchResultsSource = null; 
    searchController.Delegate = null; 
    base.ViewDidDisappear (animated); 
} 
Các vấn đề liên quan