Xamarin.Mac / Monomac的无声崩溃?

时间:2014-08-26 23:03:22

标签: multithreading monomac xamarin.mac

我需要一些随机崩溃的建议我面对单调,我认为与我如何使用UI有关,有时我得到一个未知的选择器错误。

下面:

堆栈跟踪:

at< 0xffffffff>   at(包装器托管到本机)MonoMac.AppKit.NSApplication.NSApplicationMain(int,string [])   在/Users/builder/data/lanes/xamcore-lion-1.10-branch/834542f8/source/xamcore/src/AppKit/NSApplication.cs:105中的MonoMac.AppKit.NSApplication.Main(string [])[0x00041]   在Touring.MacOSX.MainClass.Main(string [])[0x00005] in /Users/starlingonzalez/Desktop/TouringProject/Touring/Touring.MacOSX/Main.cs:17   at(wrapper runtime-invoke).runtime_invoke_void_object(object,intptr,intptr,intptr)

原生堆栈跟踪:

来自gdb的调试信息:

^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d ^ d 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 ^ d 放弃 qu执行' /tmp/mono-gdb-commands.rDRFXp'中的命令。 (lldb)进程附加--pid 4585 过程4585停止 可执行模块设置为" /Users/starlingonzalez/Desktop/TouringProject/Touring/Touring.MacOSX/bin/Release/Touring.app/Contents/MacOS/Touring"。 架构设置为:i486-apple-macosx。 (lldb)线程列表 过程4585停止 * thread#1:tid = 0x19905,0x9a730fed libsystem_kernel.dylib __wait4 + 5, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP thread #2: tid = 0x19911, 0x9a731992 libsystem_kernel.dylib kevent64 + 10,queue =' com.apple.libdispatch-manager'   线程#3:tid = 0x19912,0x9a731046 libsystem_kernel.dylib __workq_kernreturn + 10 thread #4: tid = 0x19914, 0x9a731046 libsystem_kernel.dylib __ workq_kernreturn + 10   线程#5:tid = 0x19916,0x9a72bfb6 libsystem_kernel.dylib semaphore_wait_trap + 10 thread #6: tid = 0x19917, 0x9a730a26 libsystem_kernel.dylib __ recvfrom + 10   线程#7:tid = 0x19919,0x9a731046 libsystem_kernel.dylib __workq_kernreturn + 10 thread #8: tid = 0x1992d, 0x9a72bf7a libsystem_kernel.dylib mach_msg_trap + 10 (lldb)线程回溯全部 * thread#1:tid = 0x19905,0x9a730fed libsystem_kernel.dylib __wait4 + 5, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP * frame #0: 0x9a730fed libsystem_kernel.dylib __ wait4 + 5     帧#1:0x97e70ec5 libsystem_c.dylib waitpid$UNIX2003 + 48 frame #2: 0x00187319 Touring mono_handle_native_sigsegv(signal = 11,ctx = 0x016eafe0)+ 489 at mini-exceptions.c:2323     帧#3:0x001241a5游览mono_arch_handle_altstack_exception(sigctx=0x016eafe0, fault_addr=0x37d8f5bb, stack_ovf=0) + 149 at exceptions-x86.c:1159 frame #4: 0x001b5dbf Touring mono_sigsegv_signal_handler(_dummy = 11,info = 0x016eafa0,context = 0x016eafe0)+ 415 at mini.c:6860     第5帧:0x963cbdeb libsystem_platform.dylib`_sigtramp + 43

线程#2:tid = 0x19911,0x9a731992 libsystem_kernel.dylib kevent64 + 10, queue = 'com.apple.libdispatch-manager' frame #0: 0x9a731992 libsystem_kernel.dylib kevent64 + 10     第1帧:0x974ef899 libdispatch.dylib _dispatch_mgr_invoke + 238 frame #2: 0x974ef532 libdispatch.dylib _ dispatch_mgr_thread + 52

线程#3:tid = 0x19912,0x9a731046 libsystem_kernel.dylib __workq_kernreturn + 10 frame #0: 0x9a731046 libsystem_kernel.dylib __ workq_kernreturn + 10     帧#1:0x902e0dcf libsystem_pthread.dylib`_pthread_wqthread + 372

线程#4:tid = 0x19914,0x9a731046 libsystem_kernel.dylib __workq_kernreturn + 10 frame #0: 0x9a731046 libsystem_kernel.dylib __ workq_kernreturn + 10     帧#1:0x902e0dcf libsystem_pthread.dylib`_pthread_wqthread + 372

线程#5:tid = 0x19916,0x9a72bfb6 libsystem_kernel.dylib semaphore_wait_trap + 10 frame #0: 0x9a72bfb6 libsystem_kernel.dylib semaphore_wait_trap + 10     帧#1:0x00327fce在gc.c中游览mono_sem_wait(sem=<unavailable>, alertable=<unavailable>, sem=0x0042d700, alertable=1) + 30 at mono-semaphore.c:103 frame #2: 0x00209eab Touring finalizer_thread(unused = 0x00000000)+ 187:1077     帧#3:0x002e8395在threads.c:707中游览start_wrapper [inlined] start_wrapper_internal(data=0x7be2fb40) + 523 at threads.c:660 frame #4: 0x002e818a Touring start_wrapper(data = 0x7be2fb40)+ 26     帧#5:0x00328cfd游览inner_start_thread(arg=0xbff36670) + 253 at mono-threads-posix.c:100 frame #6: 0x902df5fb libsystem_pthread.dylib _ pthread_body + 144     第7帧:0x902df485 libsystem_pthread.dylib`_pthread_start + 130

线程#6:tid = 0x19917,0x9a730a26 libsystem_kernel.dylib __recvfrom + 10 frame #0: 0x9a730a26 libsystem_kernel.dylib __ recvfrom + 10     帧#1:0x97e710c9 libsystem_c.dylib recv$UNIX2003 + 54 frame #2: 0x00100480 Touring socket_transport_recv(buf = 0xb039af2d,len = 11)+ 160在debugger-agent.c:1131     帧#3:0x000fc4bb在mono-threads-posix.c:100中巡回debugger_thread(arg=0x00000000) + 22267 at debugger-agent.c:1557 frame #4: 0x00328cfd Touring inner_start_thread(arg = 0xbff36680)+ 253     第5帧:0x902df5fb libsystem_pthread.dylib _pthread_body + 144 frame #6: 0x902df485 libsystem_pthread.dylib _ pthread_start + 130

线程#7:tid = 0x19919,0x9a731046 libsystem_kernel.dylib __workq_kernreturn + 10 frame #0: 0x9a731046 libsystem_kernel.dylib __ workq_kernreturn + 10     帧#1:0x902e0dcf libsystem_pthread.dylib`_pthread_wqthread + 372

线程#8:tid = 0x1992d,0x9a72bf7a libsystem_kernel.dylib mach_msg_trap + 10 frame #0: 0x9a72bf7a libsystem_kernel.dylib mach_msg_trap + 10     帧#1:0x9a72b16c libsystem_kernel.dylib mach_msg + 68 frame #2: 0x9a577bf9 CoreFoundation __ CFRunLoopServiceMachPort + 169     帧#3:0x9a5771d1 CoreFoundation __CFRunLoopRun + 1393 frame #4: 0x9a5769ea CoreFoundation CFRunLoopRunSpecific + 394     帧#5:0x9a57684b CoreFoundation CFRunLoopRunInMode + 123 frame #6: 0x90c95b88 AppKit _ NSEventThread + 283     帧#7:0x902df5fb libsystem_pthread.dylib _pthread_body + 144 frame #8: 0x902df485 libsystem_pthread.dylib _ pthread_start + 130 (lldb)分离 从过程4585中分离 (lldb)退出

3 个答案:

答案 0 :(得分:0)

有时这样的崩溃可能是由于绑定中的错误造成的。尝试保持与崩溃关联的屏幕/ UI元素的c#引用。如果这解决了问题,请提交错误:

https://bugzilla.xamarin.com

详情。

答案 1 :(得分:0)

尝试升级到Mono 3.6。它解决了许多线程问题,包括创建大量短线程的问题。

答案 2 :(得分:0)

好的,我经过多次尝试后想出来,赶紧到处,你可以在AppDelegate.cs类的构造函数中输入以下内容:

            AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) => {
                Exception GivenException = (Exception) e.ExceptionObject;
                Console.WriteLine( GivenException.Message);
                Console.WriteLine( GivenException.StackTrace);
                Console.WriteLine("Runtime terminating: {0}", e.IsTerminating);
            };

这不会避免应用程序终止,但至少你会确切地知道在哪里寻找并解决问题。

如果有人遇到同样的问题,请放在这里。