我的一个构造函数抛出了一个“ArgumentNullException”,所以我开始调试。
我发现了这个奇怪的问题。 如您所见,调试器说我的propsSegment不为null;但Debug.Assert表示它为空。
这里发生了什么?
这是一个.Net Core 2.0项目,正在编译为x64。 我正在运行一个线程并且有足够的内存来备用。
如果你们想检查来源,项目将被托管here。 我创建了一个分支来展示这个问题。 如果您尝试编译它,您将需要一个“otbm”文件。 我使用的是压缩here
编辑:downvotes让我觉得我错过了一些明显的东西。 有人可以请告诉我它是什么?
完整的堆栈跟踪:
System.ArgumentNullException
HResult=0x80004003
Message=Value cannot be null.
Source=System.Private.CoreLib
StackTrace:
at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.ArraySegment`1.op_Implicit(T[] array)
at COTS.GameServer.World.WorldLoader.ConvertingParsingNode(Byte[] serializedWorldData, ParsingWorldNode subtree) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 153
at COTS.GameServer.World.WorldLoader.<>c__DisplayClass10_0.<ConvertingParsingNode>b__0(ParsingWorldNode c) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 148
at System.Linq.Enumerable.SelectListIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at COTS.GameServer.World.WorldLoader.ConvertingParsingNode(Byte[] serializedWorldData, ParsingWorldNode subtree) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 146
at COTS.GameServer.World.WorldLoader.<>c__DisplayClass10_0.<ConvertingParsingNode>b__0(ParsingWorldNode c) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 148
at System.Linq.Enumerable.SelectListIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at COTS.GameServer.World.WorldLoader.ConvertingParsingNode(Byte[] serializedWorldData, ParsingWorldNode subtree) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 146
at COTS.GameServer.World.WorldLoader.<>c__DisplayClass10_0.<ConvertingParsingNode>b__0(ParsingWorldNode c) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 148
at System.Linq.Enumerable.SelectListIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at COTS.GameServer.World.WorldLoader.ConvertingParsingNode(Byte[] serializedWorldData, ParsingWorldNode subtree) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 146
at COTS.GameServer.World.WorldLoader.<>c__DisplayClass10_0.<ConvertingParsingNode>b__0(ParsingWorldNode c) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 148
at System.Linq.Enumerable.SelectListIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at COTS.GameServer.World.WorldLoader.ConvertingParsingNode(Byte[] serializedWorldData, ParsingWorldNode subtree) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 146
at COTS.GameServer.World.WorldLoader.ConvertParsingTree(Byte[] serializedWorldData, ParsingWorldNode root) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 135
at COTS.GameServer.World.WorldLoader.ParseWorld(Byte[] serializedWorldData) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\World\WorldLoader.Methods.cs:line 31
at COTS.GameServer.Program.Main(String[] args) in C:\Source\CoreOpenTibiaServer\CoreOpenTibiaServer\src\COTS.GameServer\Program.cs:line 20
答案 0 :(得分:1)
这是ArraySegment的一个未解决的问题。见https://github.com/dotnet/coreclr/issues/14012
但请注意,您不需要检查null,因为ArraySegment是一个结构。
我的猜测是ArraySegment的等于运算符试图隐式地将null转换为ArraySegment,这可能是生成实际NullReference异常的原因。