为什么我在单声道中遇到Segmentation Fault错误而不是StackOverflow错误?

时间:2015-09-07 18:41:14

标签: c# android mono

我已经为Android(ARM)编译了mono,它运行得很好。

代码: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而不是关闭我的应用程序吗?

1 个答案:

答案 0 :(得分:1)

.Net和Mono在本机/非托管代码中以不同方式处理段错误。

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

仅供参考:最近有关于单一开发列表的* nix段错误处理的讨论:http://mono.1490590.n4.nabble.com/SIGNAL-Segfault-in-native-function-called-by-managed-code-tt4666581.html