This error message is so unhelpful that it's almost pejorative: YamlDotNet.Core.SemanticErrorException: (Line: 1976, Col: 5, Idx: 66560) - (Line: 1976, Col: 5, Idx: 66560): While parsing a block collection, did not find expected '-' indicator. Great, so the game tells me WHAT is wrong in some file, but then can't be arsed to tell me which of the many dozens of playfield files contains the error. This state of affairs has persisted for years. I think it's time somebody make the effort to improve the error reporting.
Assuming the aaubry/YamlDotNet implementation is the same or similar, the issue is that the error is getting raised and then processed by a last chance exception handler. The library is used to processes info on a yaml stream, not a file. A reader is executed against a file to produce the stream but the exception doesn't have a file context to report on unless the folks writing the code wrap an error handler around it. If the file read & processing was performed in the context of a try/catch then it would be pretty trivial to add a meaningful context and then rethrow the error.
Well it can tell the error is in line (Line: 1976, Col: 5, Idx: 66560), so even in a stream it can tell where is the start or end of a file, as a single file in the playfields folder can be +2k lines each, so adding the info of what file is it the start or end of in the stream can't be that difficult....
A stream can have lines, columns, and an absolute character index but the actual source can be any file-oriented source. If the error is part of a complete stack dump then you may find the identity of the reader (i.e. "scroll to the right") but @VulcanTourist says this was the error that's surfaced- guessing in the console- and those errors don't always show up with a full dump. Maybe the .log has the full detail, but without one there would be no detailed information about calling context. Totally agree that adding a file context is trivial but it's something you need to do; the 3rd party code that detected the problem doesn't know anything about files.
No, I won't. I quoted the entire first line, all of it. Here's the full context of one of the errors: Code: 22-23:58:02.094 16_58 -EXC- YamlDotNet.Core.SemanticErrorException: (Line: 1976, Col: 5, Idx: 66560) - (Line: 1976, Col: 5, Idx: 66560): While parsing a block collection, did not find expected '-' indicator. at YamlDotNet.Core.Parser.ParseBlockSequenceEntry (System.Boolean isFirst) [0x000cb] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Core.Parser.StateMachine () [0x000ba] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Core.Parser.MoveNext () [0x0001f] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Core.ParserExtensions.Allow[T] (YamlDotNet.Core.IParser parser) [0x00018] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Core.ParserExtensions.Expect[T] (YamlDotNet.Core.IParser parser) [0x00000] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize (YamlDotNet.Core.IParser parser, System.Type expectedType, System.Func`3[T1,T2,TResult] nestedObjectDeserializer, System.Object& value) [0x000c6] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x00082] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x0006e] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer+<>c__DisplayClass3_0.<DeserializeValue>b__0 (YamlDotNet.Core.IParser r, System.Type t) [0x00000] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.NodeDeserializers.CollectionNodeDeserializer.DeserializeHelper (System.Type tItem, YamlDotNet.Core.IParser parser, System.Func`3[T1,T2,TResult] nestedObjectDeserializer, System.Collections.IList result, System.Boolean canUpdate) [0x00027] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.NodeDeserializers.CollectionNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize (YamlDotNet.Core.IParser parser, System.Type expectedType, System.Func`3[T1,T2,TResult] nestedObjectDeserializer, System.Object& value) [0x000a6] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x00082] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x0006e] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer+<>c__DisplayClass3_0.<DeserializeValue>b__0 (YamlDotNet.Core.IParser r, System.Type t) [0x00000] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize (YamlDotNet.Core.IParser parser, System.Type expectedType, System.Func`3[T1,T2,TResult] nestedObjectDeserializer, System.Object& value) [0x0006b] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x00082] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x0006e] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer+<>c__DisplayClass3_0.<DeserializeValue>b__0 (YamlDotNet.Core.IParser r, System.Type t) [0x00000] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize (YamlDotNet.Core.IParser parser, System.Type expectedType, System.Func`3[T1,T2,TResult] nestedObjectDeserializer, System.Object& value) [0x0006b] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x00082] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue (YamlDotNet.Core.IParser parser, System.Type expectedType, YamlDotNet.Serialization.Utilities.SerializerState state, YamlDotNet.Serialization.IValueDeserializer nestedObjectDeserializer) [0x0006e] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.Deserializer.Deserialize (YamlDotNet.Core.IParser parser, System.Type type) [0x0004e] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.Deserializer.Deserialize (System.IO.TextReader input, System.Type type) [0x00007] in <d43d2ed7565c41478307bcec140df821>:0 at YamlDotNet.Serialization.Deserializer.Deserialize[T] (System.IO.TextReader input) [0x00000] in <d43d2ed7565c41478307bcec140df821>:0 at Assembly-CSharp.StoreEventArgsBitmapLayout.EditToolbar[A] (System.IO.TextReader , System.String , System.Boolean , System.Boolean ) [0x0000f] in <8051e5a36e984f4a81152694a329219e>:0 NullReferenceException: Object reference not set to an instance of an object at Assembly-CSharp.ControlConverter.DisconnectBuilder () [0x00019] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.GroupType.NavigateAddin (System.String , System.String , System.String , System.Int32 , System.Int32 , PlayfieldYamlData& ) [0x0001c] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.PageAttributeBitmapLayout.QuotePath (System.String ) [0x000fe] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.PageAttributeBitmapLayout.EnableSelection (System.String ) [0x00030] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.PageAttributeBitmapLayout.SplitProject (System.String , System.String , Assembly-CSharp.MemoryProviderBitmapLayout ) [0x000f1] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.PageAttributeBitmapLayout.ChangeConnection (Assembly-CSharp.PageAttributeBitmapLayout+ContextSettingsBitmapLayout ) [0x0003f] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.PageAttributeBitmapLayout+ConnectionDictionaryBitmapLayout.EnableXmlFile (System.Boolean ) [0x00003] in <8051e5a36e984f4a81152694a329219e>:0 at Assembly-CSharp.PaneEditorBitmapLayout.OnSelect (System.Boolean _bSelected) [0x0001f] in <8051e5a36e984f4a81152694a329219e>:0 at UIActionList.SplitDockingPane (Assembly-CSharp.PaneEditorBitmapLayout ) [0x00044] in <8051e5a36e984f4a81152694a329219e>:0 at UIActionList.OnClick (Assembly-CSharp.PaneEditorBitmapLayout _action) [0x00000] in <8051e5a36e984f4a81152694a329219e>:0 at UIActionControlUI.OnClick () [0x00009] in <8051e5a36e984f4a81152694a329219e>:0 Do you see a filename anywhere? Only a portion of that first line is displayed in the console. The filename, if it were displayed, should be in the portion displayed in the console.
I'm well aware of that. Where do you think what I quoted above came from? Further, don't call those "crash files", that's misleading; in instances like this the game hasn't crashed - which would now result in the Unity Crash Handler taking over - it has just encountered a non-fatal exception. The files generated by the Unity Crash Handler are rightly called "crash files". The game's log files are just that, files that log game activity, both good and bad. At the point of an actual crash, the game's log file becomes useless because, well... the game has crashed and can't log anything. That's the whole raison d'etre of the Unity Crash Handler. It's also worth noting that you didn't find the filename that you said would exist "to the right".
Why would you ask that? The answer should be obvious: I would have found the offending file and been able to correct the error in a few MINUTES rather than the HOUR-long fishing expedition that was required. Why do you suppose that Ravien also said that "showing the file name would be really, really, really helpful"? I can only guess at how many such fishing expeditions he's had to perform while maintaining his scenario. All because the game doesn't share the filename that was the source of an error.
Hey M, you're making an assumption that this is a bug. If you modify the playfield yaml files then, by definition, the issue is your problem. This appears to be just a simple ask to support people who choose to do so by providing context on yaml syntax errors. Such a change needs to be done in the exception (i.e. try/catch/throw) vs. just doing a console print of "Currently loading: xxxx.yaml" because playfield processing may be a parallel operation, if not now at some point, so the processing and error reporting needs to be self-contained. Like VT says, the fact that the guy who has arguably edited more playfield yaml files than any three of us says "showing the file name would be really, really, really helpful" sort of implies it's a real problem that real people run into. 8^)
Indeed... why would I file a bug report when I know my modifications were the cause and all I need is for the game to tell me where it found the issue in a helpful fashion? Hopefully your intercession explained it well enough so that the twenty-questions routine can stop. I felt like he was intentionally baiting me toward something I wouldn't like. The current fashion that the game reports such issues reminds me of a scene from an ancient cartoon where one of the characters coyly sings, "I know something I won't tell, I won't tell...." Another example is this error that I've been getting for years now with no apparent ill effect: Code: ECF file syntax error: C@!1 That is the actual error, verbatim. Not only, again, does it not name an offending file, what are we humans supposed to make of "C@!1"...? That text appears nowhere in any ECF file.