0

我需要一些关于我在 monomac 中遇到的随机崩溃的建议,我认为这与我使用 UI 的方式有关,有时我得到一个未知的选择器错误。

这里:

堆栈跟踪:

在 <0xffffffff> at (wrapper managed-to-native) MonoMac.AppKit.NSApplication.NSApplicationMain (int,string[]) at MonoMac.AppKit.NSApplication.Main (string[]) [0x00041] in /Users/builder/data /lanes/xamcore-lion-1.10-branch/834542f8/source/xamcore/src/AppKit/NSApplication.cs:105 at 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 的调试信息:

(lldb) 进程附加 --pid 4585 进程 4585 已停止设置为“/Users/starlingonzalez/Desktop/TouringProject/Touring/Touring.MacOSX/bin/Release/Touring.app/Contents/MacOS/Touring”的可执行模块。架构设置为:i486-apple-macosx。(lldb) 线程列表进程 4585 已停止 * 线程 #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.dylibkevent64 + 10,队列 = '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.dylibmach_msg_trap + 10 (lldb) 线程回溯所有 * 线程 #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 Touringmono_handle_native_sigsegv() + 489 at mini-exceptions.c:2323 frame #3: 0x001241a5 Touring mono_arch_handle_altstack_exception(sigctx=0x016eafe0, fault_addr=0x37d8f5bb, stack_ovf=0) + 149 at exceptions-x86.c:1159 frame #4: 0x001b5dbf Touringmono_sigsegv_signal_handler(_dummy=11, info=0x016eafa0, context=0x016eafe0) + 415 at mini.c:6860 frame #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.dylibkevent64 + 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.dylibsemaphore_wait_trap + 10 帧#1:0x00327fce Touring mono_sem_wait(sem=<unavailable>, alertable=<unavailable>, sem=0x0042d700, alertable=1) + 30 at mono-semaphore.c:103 frame #2: 0x00209eab Touringfinalizer_thread(unused=0x00000000) + 187 at gc.c:1077 frame #3: 0x002e8395 Touring start_wrapper [inlined] start_wrapper_internal(data=0x7be2fb40) + 523 at threads.c:660 frame #4: 0x002e818a Touringstart_wrapper(data=06b40) threads.c:707 帧#5:0x00328cfd Touring 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 Touringsocket_transport_recv(buf=0xb039af2d, len=11) + 160 at debugger-agent.c:1131 帧 #3: 0x000fc4Touring debugger_thread(arg=0x00000000) + 22267 at debugger-agent.c:1557 frame #4: 0x00328cfd Touringinnerstart_ (arg=0xbff36680) + 253 at mono-threads-posix.c:100 frame #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

thread #8: tid = 0x1992d, 0x9a72bf7a libsystem_kernel.dylib mach_msg_trap + 10 frame #0: 0x9a72bf7a libsystem_kernel.dylibmach_msg_trap + 10 frame #1: 0x9a72b16c libsystem_kernel.dylib mach_msg + 68 frame #2: 0x9a577bf9 CoreFoundation__CFRunLoopServiceMachPort + 169 frame #3: 0x9a5771d1 CoreFoundation __CFRunLoopRun + 1393 frame #4: 0x9a5769ea CoreFoundationCFRunLoopRunSpecific + 394 frame #5: 0x9a57684b CoreFoundation CFRunLoopRunInMode + 123 frame #6: 0x90c95b88 AppKit_NSEventThread + 283 frame #7: 0x902df5fb libsystem_pthread .dylib _pthread_body + 144 frame #8: 0x902df485 libsystem_pthread.dylib_pthread_start + 130 (lldb) detach 从进程 4585 (lldb) 中分离退出

4

3 回答 3

0

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

于 2014-09-11T10:11:30.473 回答
0

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

https://bugzilla.xamarin.com

有细节。

于 2014-08-28T16:33:57.803 回答
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);
            };

这不会避免应用程序终止,但至少您将确切知道在哪里查找和解决问题。

只是放在这里,以防有人遇到同样的问题。

于 2015-03-14T01:52:11.320 回答