Debugging 在Xamarin.iOS应用程序中查找SIGSEGV的原因

Debugging 在Xamarin.iOS应用程序中查找SIGSEGV的原因,debugging,xamarin.ios,xamarin,Debugging,Xamarin.ios,Xamarin,我正在使用Xamarin.IOS开发我的第一个真正的应用程序。大多数情况下,该应用程序运行良好,但每天有几次,它会因以下stacktrace崩溃: mono-rt: Stacktrace: mono-rt: at <unknown> <0xffffffff> mono-rt: at (wrapper managed-to-native) MonoTouch.Foundation.NSObject.monotouch_release_managed_ref (int

我正在使用Xamarin.IOS开发我的第一个真正的应用程序。大多数情况下,该应用程序运行良好,但每天有几次,它会因以下stacktrace崩溃:

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.
=================================================================
mono-rt:Stacktrace:
mono-rt:at
MONO RT:AT(包装管理到原生)单调。
Muno RT:在MyTrask.NasObjut.RelaseMeAgEdEDE()[0x0000 ] in /Deave/MonoTouch /Soal/Stimouc/Src/Fung/NsObjul.Cs:98
MunoRt:NasObj.NbObjuts/NsObjutsApdio.Error(MangouCuff.Fase.NSObjult[0x000 062])//Deave/MonoTouch /Soal/Stimouc/Src/Sudio/Fung/NsObjut2.Cs: 545
mono rt:at(包装器运行时调用)。运行时调用无效对象(对象,intptr,intptr,intptr)
mono-rt:at
mono rt:at(包装器管理为本机)MonoTouch.UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
mono-rt:at MonoTouch.UIKit.UIApplication.Main(string[],string,string)[0x0004c]in/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIApplication.cs:38
mono rt:位于/Users/danielnordmark/Projects/Diet52App/Diet52App/Main.cs:16中的Diet52App.Application.Main(字符串[])[0x00008]
mono rt:at(包装器运行时调用)。运行时调用无效对象(对象,intptr,intptr,intptr)
mono-rt:
本机堆栈跟踪:
mono-rt:
=================================================================
在执行本机代码时收到SIGSEGV。这通常表明
mono运行时或某个本机库中出现致命错误
由您的应用程序使用。
=================================================================
我猜在我尝试使用某个对象之前,它会被垃圾收集。但是我觉得有点不知所措,不知道如何在我的代码中找出何时何地发生这种情况


我怎样才能知道问题出在哪里?非常感谢您的帮助

问题似乎与我的UITableViewController有关,我有一个基类和两个不同的实例。这两者之间的冲突导致SIGSEGV错误

多亏了这个答案,我成功地追踪到了这个问题

我唯一需要做的修改就是用InvokeOnMainThread这样包装代码

更新: 在与Xamarin的Rolf联系后,我更新了我的解决方案,正确的修复方法是将代码放在ViewDidDissapear中,而不是Dispose中

public override void viewdiddefine(bool动画)
{
searchController.SearchResultsSource=null;
searchController.Delegate=null;
base.viewdide(动画);
}