为什么我在单声道中收到分段错误而不是 StackOverflow 错误?

Why am I getting Segmentation Fault error instead of StackOverflow error in mono?

我已经为 Android (ARM) 编译了单声道,并且运行良好。

代码:err.cs:

using System;
namespace E
{
    class E {
        public static void Main(string[] args)
        {
            Console.WriteLine("ERR");
            e();
        }

        private static void e(){e();}
    }

}

在 PC 上我得到这个输出:

ERR
Stack overflow: IP: 0x407cb1b7, fault addr: 0x7ffc4dabbff8
Stacktrace:
  at E.E.e () <0x0000b>
  <...>
  at E.E.Main (string[]) <0x0001f>
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <0xffffffff>

但是在 Android 我遇到了分段错误(输出):

ERR
Segmentation Fault

我可以用它做任何事情来捕获异常并写入 logcat 而不是关闭我的应用程序吗?

.Net 和 Mono 在 native/non-managed 代码中出现段错误时的处理方式不同。

在 Mono 下,如果 segfault 被本机代码触发,那么您将获得堆栈跟踪并且程序被中止,如果 seqfault 被托管代码触发,它将作为托管异常处理。

仅供参考:最近在 mono-dev 列表上讨论了 *nix 段错误处理:http://mono.1490590.n4.nabble.com/SIGNAL-Segfault-in-native-function-called-by-managed-code-tt4666581.html