Я часто вижу сбои SIGABRT в консольном приложении Mono, которые находятся за пределами моего кода.
Я ищу переполнение стека и обнаружил похожую проблему (3 года), которая была помечена как решенная, но я вижу то же самое. Этот вопрос был Прерывистый SIGSEV (segfault), SIGABORT и зависание процесса в коде C # с использованием Mono .
Окружающая среда:
Ubuntu 16.04.5 LTS
Linux 4.4.0-137-generic
X64 Architecture
Я получаю следующую ошибку:
* Assertion: should not be reached at sgen-scan-object.h:101
Stacktrace:
at <unknown> <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_gc_alloc_vector (intptr,intptr,intptr) <0xffffffff>
at (wrapper alloc) object.AllocVector (intptr,intptr) <0xffffffff>
at Newtonsoft.Json.Utilities.BufferUtils.RentBuffer (Newtonsoft.Json.IArrayPool`1<char>,int) <0x0002c>
at Newtonsoft.Json.JsonTextReader.EnsureBuffer () <0x0002b>
at Newtonsoft.Json.JsonTextReader.Read () <0x00017>
at Newtonsoft.Json.JsonReader.ReadAndMoveToContent () <0x00013>
at Newtonsoft.Json.JsonReader.ReadForType (Newtonsoft.Json.Serialization.JsonContract,bool) <0x0007b>
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader,System.Type,bool) <0x000d7>
at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader,System.Type) <0x0015f>
at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader,System.Type) <0x0001b>
at Newtonsoft.Json.JsonConvert.DeserializeObject (string,System.Type,Newtonsoft.Json.JsonSerializerSettings) <0x000eb>
at Newtonsoft.Json.JsonConvert.DeserializeObject<TResult_REF> (string,Newtonsoft.Json.JsonSerializerSettings) <0x0002f>
at Newtonsoft.Json.JsonConvert.DeserializeObject<TResult_REF> (string) <0x00027>
at Oxygen.xfer.GetFromJSON (string) <0x0001b>
at Oxygen.MyServiceClient.Proceed () <0x00213>
at Oxygen.IndexerEngine.IndexProcess () <0x00113>
at Oxygen.IndexerEngine.<.ctor>b__7_1 () <0x0000f>
at System.Threading.Tasks.Task.InnerInvoke () <0x0004f>
at System.Threading.Tasks.Task.Execute () <0x00055>
at System.Threading.Tasks.Task.ExecutionContextCallback (object) <0x00055>
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) <0x0016e>
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) <0x00020>
at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.Task&) <0x00116>
at System.Threading.Tasks.Task.ExecuteEntry (bool) <0x000ee>
at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () <0x0000e>
at System.Threading.ThreadPoolWorkQueue.Dispatch () <0x001d6>
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () <0x00008>
at (wrapper runtime-invoke) <Module>.runtime_invoke_bool (object,intptr,intptr,intptr) <0xffffffff>
Native stacktrace:
/usr/bin/cli() [0x49ff2f]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x11390) [0x7f8964be1390]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38) [0x7f896483b428]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x16a) [0x7f896483d02a]
/usr/bin/cli() [0x630409]
/usr/bin/cli() [0x63069c]
/usr/bin/cli() [0x630833]
/usr/bin/cli() [0x5fb526]
/usr/bin/cli() [0x5e8f81]
/usr/bin/cli() [0x5ea974]
/usr/bin/cli() [0x5eca95]
/usr/bin/cli() [0x5dfe72]
/usr/bin/cli() [0x5ce716]
[0x402e573e]
Debug info from gdb:
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=======================================================
Aborted
Я не уверен, как поступить.
Код GetFromJson действительно прост:
<code>
public static xfer GetFromJSON(string json)
{
return JsonConvert.DeserializeObject(json);
}
Это вызов от 300 до 400 раз до сбоя. Связанная библиотека используется в другом консольном приложении, которое вызывает ее миллионы раз без происшествий. Основное различие между этими двумя приложениями состоит в том, что одно без инцидентов выполняет вычисления с ЦП, а другое, в котором есть проблемы, использует графический процессор NVidia, доступ к которому осуществляется через OpenCL.