neuecc / Utf8Json

Definitely Fastest and Zero Allocation JSON Serializer for C#(NET, .NET Core, Unity, Xamarin).
MIT License
2.36k stars 267 forks source link

Crash on Unity for Android #114

Open shikui08 opened 6 years ago

shikui08 commented 6 years ago

Simply imported Utf8Json.Unity.1.3.7.1.unitypackage.

My usage is very simple:

Debug.Log("Before JsonSerializer");
byte[] b = JsonSerializer.Serialize(data);
Debug.Log("After JsonSerializer");

Where data is instance of some very basic classes, such as.

class A
{
   public String a = "";
}  
class B : A 
{
  public String b = "";
}

Everything works well on Windows, both in editor and standalone . However, when compiled & run on Android, Unity crashes without any useful information. Had to Debug.Log a lot like above. Took my a lot of time until I found out that JsonSerializer.Serialize(data);is suspicious because the Log prints:

D/Unity   ( 6844): Before JsonSerializer: 0 at ./artifacts/generated/common/runtime/DebugBindings.gen.cpp:51 (17408, 0, 0)

I/Unity   ( 6844): Before JsonSerializer

F/libc    ( 6844): Fatal signal 11 (SIGSEGV) at 0x0000005c (code=1), thread 6858 (UnityMain)

I/DEBUG   ( 1531): pid: 6844, tid: 6858, pkg name: com.xx11xxCompany.ProductName

I/DEBUG   ( 1531): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

I/DEBUG   ( 1531): Build fingerprint: 'samsung/hlteuc/hlteatt:4.4.2/KOT49H/N900AUCUCMLG:user/release-keys'

I/DEBUG   ( 1531): Revision: '0'

I/DEBUG   ( 1531): pid: 6844, tid: 6858, name: UnityMain  >>> com.xx11xxCompany.ProductName <<<

I/DEBUG   ( 1531): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000005c

W/NativeCrashListener( 1807): Couldn't find ProcessRecord for pid 1885955130

I/DEBUG   ( 1531):     eax 00000000  ebx 878afc08  ecx 00000002  edx 00000000

I/DEBUG   ( 1531): AM write failure (32 / Broken pipe)

I/DEBUG   ( 1531):     esi 001cf000  edi b98c6c0c

I/DEBUG   ( 1531):     xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000  xss 0000007b

I/DEBUG   ( 1531):     eip 87725106  ebp 88aae998  esp 88aae960  flags 00210202

I/DEBUG   ( 1531): 

I/DEBUG   ( 1531): backtrace:

I/DEBUG   ( 1531):     #00  pc 001eb106  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #01  pc 001ed8f2  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #02  pc 0000ace3  <unknown>

I/DEBUG   ( 1531):     #03  pc 00009ae1  <unknown>

I/DEBUG   ( 1531):     #04  pc 000081a3  <unknown>

I/DEBUG   ( 1531):     #05  pc 00007f7f  <unknown>

I/DEBUG   ( 1531):     #06  pc 00004698  <unknown>

I/DEBUG   ( 1531):     #07  pc 000044f4  <unknown>

I/DEBUG   ( 1531):     #08  pc 0000856f  <unknown>

I/DEBUG   ( 1531):     #09  pc 0002100e  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #10  pc 001ce4db  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so (mono_runtime_invoke+140)

I/DEBUG   ( 1531):     #11  pc 001c932c  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #12  pc 001c8c12  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so (mono_runtime_class_init+25)

I/DEBUG   ( 1531):     #13  pc 000cdb47  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #14  pc 00014263  <unknown>

I/DEBUG   ( 1531):     #15  pc 0000856f  <unknown>

I/DEBUG   ( 1531):     #16  pc 0002100e  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #17  pc 001ce4db  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so (mono_runtime_invoke+140)

I/DEBUG   ( 1531):     #18  pc 001c932c  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #19  pc 00063f3c  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #20  pc 0001db39  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #21  pc 0001f800  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #22  pc 00020322  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #23  pc 00020d8a  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #24  pc 001ce4db  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so (mono_runtime_invoke+140)

I/DEBUG   ( 1531):     #25  pc 001c932c  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #26  pc 00063f3c  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #27  pc 0001db39  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #28  pc 0001f800  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #29  pc 00020322  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #30  pc 00020d8a  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so

I/DEBUG   ( 1531):     #31  pc 001ce4db  /data/app-lib/com.xx11xxCompany.ProductName-1/libmono.so (mono_runtime_invoke+140)

Unity version is 2017.1.0f3. Please anybody can help me? Is this just some bizarre behavior I encountered or a common bug? Can somebody test on Unity/Android?

Thanks guys!

shikui08 commented 6 years ago

Updates: Along with Utf8Json, I also tested Newtonsoft.Json, fastJson. All work great in Unity Editor and none works on Android with almost identical crash log.

Only exception is UnityEngine.JsonUtility and it works on all occasions, .

My Unity project settings:

Scripting Runtime Version (.Net 3.5 equivalent)
Scripting Backend (Mono)
API Compatibility level (.Net 2.0 subset)