进程有时无法 运行 Main 方法中的任何内容并卸载应用程序域
Process sometimes fails to run anything in Main method and unloads app domain
我在 Mono 4.0.3 和 OpenSUSE 13.1 上有两个带有用户界面 运行 的 C# 应用程序。第一个应用程序启动第二个应用程序,然后等待它退出。有时(比如 10 次中有 1 次)加载第二个应用程序 "fails" - 进程将启动,但处于 0% 处理器时间。如果我在 Main 方法的最开头放置一个 Console.WriteLine,则 WriteLine 永远不会发生。
我启动过程很简单:
var psi = new ProcessStartInfo("mono", " --gc=boehm MyProgram.exe");
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
var process = Process.Start(psi);
按照 debugging Mono 的步骤,gdb 的 mono_backtrace 输出是:
#0 0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1 0x0000000000615941 in GC_suspend_handler ()
#2 <signal handler called>
#3 0x00007f4dbcf030ad in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#4 0x00000000005df2d3 in _wapi_handle_timedwait_signal_handle ()
#5 0x00000000005f26fb in wapi_WaitForSingleObjectEx ()
#6 0x00000000005a9062 in mono_domain_try_unload ()
#7 0x00000000005a9154 in mono_domain_unload ()
#8 0x401931d2 in (wrapper managed-to-native) System.AppDomain:InternalUnload (int) + 0x52 (0x40193180 0x401931fe) [0x7f4dbd9c0d48 - MyProgram.exe]
#9 0x00007f4daa37d370 in ?? ()
#10 0x00007f4daa37d370 in ?? ()
#11 0x00007f4daa37d370 in ?? ()
#12 0x0000000001f17068 in ?? ()
#13 0x00007f4daa359af0 in ?? ()
#14 0x0000000001abb1d0 in ?? ()
#15 0x40192dd4 in <0x40192dd4 - JIT trampoline for System.AppDomain:InternalUnload (int)>
#16 0x00007fff4c7a9fe0 in ?? ()
#17 0x00007fff4c7a9ed0 in ?? ()
#18 0x40192da8 in System.AppDomain:Unload (System.AppDomain) + 0x28 (0x40192d80 0x40192dd4) [0x7f4dbd9c0d48 - MyProgram.exe]
我不确定这里发生了什么,我的谷歌搜索也没有结果。有什么想法吗?
编辑:为回应@EmployedRussian 的评论,这里是thread apply all where
的输出:
Thread 10 (Thread 0x7f4dbc0f7700 (LWP 7994)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 9 (Thread 0x7f4dbb8f6700 (LWP 7995)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 8 (Thread 0x7f4dbb0f5700 (LWP 7996)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7f4dba8f4700 (LWP 7997)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 6 (Thread 0x7f4dba0f3700 (LWP 7998)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 5 (Thread 0x7f4db98f2700 (LWP 7999)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 4 (Thread 0x7f4db90f1700 (LWP 8000)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 3 (Thread 0x7f4db832b700 (LWP 8001)):
#0 0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1 0x0000000000615941 in GC_suspend_handler ()
#2 <signal handler called>
#3 0x00007f4dbcf0589a in __lll_lock_wait () from /lib64/libpthread.so.0
#4 0x00007f4dbcf014d7 in _L_lock_913 () from /lib64/libpthread.so.0
#5 0x00007f4dbcf01300 in pthread_mutex_lock () from /lib64/libpthread.so.0
#6 0x0000000000615235 in GC_pthread_join ()
#7 0x0000000000592b67 in mono_threads_join_threads ()
#8 0x00000000005ad192 in finalizer_thread ()
#9 0x0000000000590af4 in start_wrapper ()
#10 0x0000000000604906 in inner_start_thread ()
#11 0x0000000000615456 in GC_start_routine ()
#12 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#13 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f4da99c0700 (LWP 8004)):
#0 0x00007f4dbcf050f0 in sem_wait () from /lib64/libpthread.so.0
#1 0x0000000000615ccc in GC_stop_world ()
#2 0x0000000000606b05 in GC_stopped_mark ()
#3 0x0000000000607407 in GC_try_to_collect_inner ()
#4 0x0000000000607626 in GC_try_to_collect ()
#5 0x00000000006076ae in GC_gcollect ()
#6 0x00000000005ac7ac in mono_domain_finalize ()
#7 0x00000000005a6874 in unload_thread_main ()
#8 0x0000000000604906 in inner_start_thread ()
#9 0x0000000000615456 in GC_start_routine ()
#10 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#11 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f4dbda2b740 (LWP 7991)):
#0 0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1 0x0000000000615941 in GC_suspend_handler ()
#2 <signal handler called>
#3 0x00007f4dbcf030ad in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#4 0x00000000005df2d3 in _wapi_handle_timedwait_signal_handle ()
#5 0x00000000005f26fb in wapi_WaitForSingleObjectEx ()
#6 0x00000000005a9062 in mono_domain_try_unload ()
#7 0x00000000005a9154 in mono_domain_unload ()
#8 0x00000000401931d2 in ?? ()
#9 0x00007f4daa37d370 in ?? ()
#10 0x00007f4daa37d370 in ?? ()
#11 0x00007f4daa37d370 in ?? ()
#12 0x0000000001f17068 in ?? ()
#13 0x00007f4daa359af0 in ?? ()
#14 0x0000000001abb1d0 in ?? ()
#15 0x0000000040192dd4 in ?? ()
#16 0x00007fff4c7a9fe0 in ?? ()
#17 0x00007fff4c7a9ed0 in ?? ()
#18 0x0000000040192da8 in ?? ()
#19 0x0000000000000000 in ?? ()
我在针对 mono 4.0.3 的测试自动化(在 nunit 和我自己的进程中)中看到挂起和一些段错误 - 这在 3.12.1 中很好 - 一旦我升级到 mono 4.0.4.1 就解决了
我在 4.0.4 的发行说明中没有看到任何看起来直接相关的内容。但绝对解决了我遇到的那些问题。
我在 Mono 4.0.3 和 OpenSUSE 13.1 上有两个带有用户界面 运行 的 C# 应用程序。第一个应用程序启动第二个应用程序,然后等待它退出。有时(比如 10 次中有 1 次)加载第二个应用程序 "fails" - 进程将启动,但处于 0% 处理器时间。如果我在 Main 方法的最开头放置一个 Console.WriteLine,则 WriteLine 永远不会发生。
我启动过程很简单:
var psi = new ProcessStartInfo("mono", " --gc=boehm MyProgram.exe");
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
var process = Process.Start(psi);
按照 debugging Mono 的步骤,gdb 的 mono_backtrace 输出是:
#0 0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1 0x0000000000615941 in GC_suspend_handler ()
#2 <signal handler called>
#3 0x00007f4dbcf030ad in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#4 0x00000000005df2d3 in _wapi_handle_timedwait_signal_handle ()
#5 0x00000000005f26fb in wapi_WaitForSingleObjectEx ()
#6 0x00000000005a9062 in mono_domain_try_unload ()
#7 0x00000000005a9154 in mono_domain_unload ()
#8 0x401931d2 in (wrapper managed-to-native) System.AppDomain:InternalUnload (int) + 0x52 (0x40193180 0x401931fe) [0x7f4dbd9c0d48 - MyProgram.exe]
#9 0x00007f4daa37d370 in ?? ()
#10 0x00007f4daa37d370 in ?? ()
#11 0x00007f4daa37d370 in ?? ()
#12 0x0000000001f17068 in ?? ()
#13 0x00007f4daa359af0 in ?? ()
#14 0x0000000001abb1d0 in ?? ()
#15 0x40192dd4 in <0x40192dd4 - JIT trampoline for System.AppDomain:InternalUnload (int)>
#16 0x00007fff4c7a9fe0 in ?? ()
#17 0x00007fff4c7a9ed0 in ?? ()
#18 0x40192da8 in System.AppDomain:Unload (System.AppDomain) + 0x28 (0x40192d80 0x40192dd4) [0x7f4dbd9c0d48 - MyProgram.exe]
我不确定这里发生了什么,我的谷歌搜索也没有结果。有什么想法吗?
编辑:为回应@EmployedRussian 的评论,这里是thread apply all where
的输出:
Thread 10 (Thread 0x7f4dbc0f7700 (LWP 7994)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 9 (Thread 0x7f4dbb8f6700 (LWP 7995)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 8 (Thread 0x7f4dbb0f5700 (LWP 7996)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7f4dba8f4700 (LWP 7997)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 6 (Thread 0x7f4dba0f3700 (LWP 7998)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 5 (Thread 0x7f4db98f2700 (LWP 7999)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 4 (Thread 0x7f4db90f1700 (LWP 8000)):
#0 0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x0000000000615823 in GC_wait_marker ()
#2 0x000000000060dad5 in GC_help_marker ()
#3 0x0000000000613f87 in GC_mark_thread ()
#4 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 3 (Thread 0x7f4db832b700 (LWP 8001)):
#0 0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1 0x0000000000615941 in GC_suspend_handler ()
#2 <signal handler called>
#3 0x00007f4dbcf0589a in __lll_lock_wait () from /lib64/libpthread.so.0
#4 0x00007f4dbcf014d7 in _L_lock_913 () from /lib64/libpthread.so.0
#5 0x00007f4dbcf01300 in pthread_mutex_lock () from /lib64/libpthread.so.0
#6 0x0000000000615235 in GC_pthread_join ()
#7 0x0000000000592b67 in mono_threads_join_threads ()
#8 0x00000000005ad192 in finalizer_thread ()
#9 0x0000000000590af4 in start_wrapper ()
#10 0x0000000000604906 in inner_start_thread ()
#11 0x0000000000615456 in GC_start_routine ()
#12 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#13 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f4da99c0700 (LWP 8004)):
#0 0x00007f4dbcf050f0 in sem_wait () from /lib64/libpthread.so.0
#1 0x0000000000615ccc in GC_stop_world ()
#2 0x0000000000606b05 in GC_stopped_mark ()
#3 0x0000000000607407 in GC_try_to_collect_inner ()
#4 0x0000000000607626 in GC_try_to_collect ()
#5 0x00000000006076ae in GC_gcollect ()
#6 0x00000000005ac7ac in mono_domain_finalize ()
#7 0x00000000005a6874 in unload_thread_main ()
#8 0x0000000000604906 in inner_start_thread ()
#9 0x0000000000615456 in GC_start_routine ()
#10 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#11 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f4dbda2b740 (LWP 7991)):
#0 0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1 0x0000000000615941 in GC_suspend_handler ()
#2 <signal handler called>
#3 0x00007f4dbcf030ad in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#4 0x00000000005df2d3 in _wapi_handle_timedwait_signal_handle ()
#5 0x00000000005f26fb in wapi_WaitForSingleObjectEx ()
#6 0x00000000005a9062 in mono_domain_try_unload ()
#7 0x00000000005a9154 in mono_domain_unload ()
#8 0x00000000401931d2 in ?? ()
#9 0x00007f4daa37d370 in ?? ()
#10 0x00007f4daa37d370 in ?? ()
#11 0x00007f4daa37d370 in ?? ()
#12 0x0000000001f17068 in ?? ()
#13 0x00007f4daa359af0 in ?? ()
#14 0x0000000001abb1d0 in ?? ()
#15 0x0000000040192dd4 in ?? ()
#16 0x00007fff4c7a9fe0 in ?? ()
#17 0x00007fff4c7a9ed0 in ?? ()
#18 0x0000000040192da8 in ?? ()
#19 0x0000000000000000 in ?? ()
我在针对 mono 4.0.3 的测试自动化(在 nunit 和我自己的进程中)中看到挂起和一些段错误 - 这在 3.12.1 中很好 - 一旦我升级到 mono 4.0.4.1 就解决了
我在 4.0.4 的发行说明中没有看到任何看起来直接相关的内容。但绝对解决了我遇到的那些问题。