我已经为 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 而不是关闭我的应用程序吗?
最佳答案
.Net 和 Mono 以不同方式处理 native /非托管代码中出现的段错误。
在 Mono 下,如果 segfault 被 native 代码触发,那么您将获得堆栈跟踪并且程序被中止,如果 seqfault 被托管代码触发,它将作为托管异常处理。
仅供引用:最近在 mono-dev 列表上讨论了 *nix 段错误处理:http://mono.1490590.n4.nabble.com/SIGNAL-Segfault-in-native-function-called-by-managed-code-tt4666581.html
关于c# - 为什么我在单声道中收到段错误而不是 StackOverflow 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444441/