Android用のmono(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は、ネイティブ/非マネージコードで発生した場合のセグメンテーション違反の処理方法が異なります。
Monoでは、segfaultがネイティブコードによってトリップされた場合、スタックトレースが取得され、プログラムが中止されます。seqfaultがマネージコードによってトリップされた場合、マネージ例外として処理されます。
参考:mono-devリストで* nix segfaultの処理について最近議論がありました:http://mono.1490590.n4.nabble.com/SIGNAL-Segfault-in-native-function-called-by-managed-code -tt4666581.html
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加