KirillOsenkov / RoslynQuoter

Roslyn tool that for a given C# program shows syntax tree API calls to construct its syntax tree
http://roslynquoter.azurewebsites.net
Apache License 2.0
918 stars 118 forks source link

The tool said I should post a Bug #37

Closed LokiMidgard closed 6 years ago

LokiMidgard commented 6 years ago

I entered:

        private static readonly global::NDProperty.Propertys.NDAttachedPropertyKey<Propertys.NDPConfiguration, object, bool> IsSelectedProperty = global::NDProperty.PropertyRegistar<Propertys.NDPConfiguration>.RegisterAttached<object, bool>(OnIsSelectedChanging, default (bool), global::NDProperty.Propertys.NDPropertySettings.ReadOnly,null);

I got

Congratulations! You've found a bug in Quoter! Please open an issue at https://github.com/KirillOsenkov/RoslynQuoter/issues/new and paste the code you've typed above and this stack:
System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
   at System.Runtime.InteropServices.Marshal.AllocHGlobal(IntPtr cb)
   at System.Runtime.InteropServices.Marshal.AllocHGlobal(Int32 cb)
   at System.Reflection.Internal.NativeHeapMemoryBlock.DisposableData..ctor(Int32 size)
   at System.Reflection.Internal.StreamMemoryBlockProvider.ReadMemoryBlockNoLock(Stream stream, Boolean isFileStream, Int64 start, Int32 size)
   at System.Reflection.PortableExecutable.PEReader..ctor(Stream peStream, PEStreamOptions options, Int32 size)
   at Microsoft.CodeAnalysis.ModuleMetadata.CreateFromStream(Stream peStream, PEStreamOptions options)
   at Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(String path, MetadataReferenceProperties properties, DocumentationProvider documentation)
   at Microsoft.CodeAnalysis.Scripting.Hosting.RuntimeMetadataReferenceResolver.ResolveTrustedPlatformAssemblyCore(String name, MetadataReferenceProperties properties)
   at Microsoft.CodeAnalysis.Scripting.Hosting.RuntimeMetadataReferenceResolver.ResolveMissingAssembly(MetadataReference definition, AssemblyIdentity referenceIdentity)
   at Microsoft.CodeAnalysis.CommonReferenceManager`2.ResolveAndBindMissingAssemblies(TCompilation compilation, ImmutableArray`1 explicitAssemblies, ImmutableArray`1 explicitModules, ImmutableArray`1 explicitReferences, ImmutableArray`1 explicitReferenceMap, MetadataReferenceResolver resolver, MetadataImportOptions importOptions, Boolean supersedeLowerVersions, ArrayBuilder`1 referenceBindings, Dictionary`2 assemblyReferencesBySimpleName, ImmutableArray`1& allAssemblies, ImmutableArray`1& metadataReferences, ImmutableArray`1& resolvedReferences, DiagnosticBag resolutionDiagnostics)
   at Microsoft.CodeAnalysis.CommonReferenceManager`2.Bind(TCompilation compilation, ImmutableArray`1 explicitAssemblies, ImmutableArray`1 explicitModules, ImmutableArray`1 explicitReferences, ImmutableArray`1 explicitReferenceMap, MetadataReferenceResolver resolverOpt, MetadataImportOptions importOptions, Boolean supersedeLowerVersions, Dictionary`2 assemblyReferencesBySimpleName, ImmutableArray`1& allAssemblies, ImmutableArray`1& implicitlyResolvedReferences, ImmutableArray`1& implicitlyResolvedReferenceMap, DiagnosticBag resolutionDiagnostics, Boolean& hasCircularReference, Int32& corLibraryIndex)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ReferenceManager.CreateAndSetSourceAssemblyFullBind(CSharpCompilation compilation)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ReferenceManager.CreateSourceAssemblyForCompilation(CSharpCompilation compilation)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.get_SourceModule()
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.get_CommonSourceModule()
   at Microsoft.CodeAnalysis.Compilation.CommonBindScriptClass()
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.BindScriptClass()
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetEntryPointAndDiagnostics(CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CommonGetEntryPoint(CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.Build[T](Compilation compilation, DiagnosticBag diagnostics, Boolean emitDebugInformation, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.CreateExecutor[T](ScriptCompiler compiler, Compilation compilation, Boolean emitDebugInformation, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.GetExecutor(CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.RunAsync(Object globals, Func`2 catchException, CancellationToken cancellationToken)
   at Quoter.Evaluate(String apiCallString, Boolean normalizeWhitespace) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 1042
   at Quoter.AddModifyingCall(ApiCall apiCall, MethodCall methodCall) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 1018
   at Quoter.AddModifyingCalls(Object treeElement, ApiCall apiCall, List`1 values) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 1012
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 182
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.Quote(Object treeElement, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 134
   at Quoter.<QuoteList>b__31_0(Object o) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 323
   at System.Linq.Enumerable.SelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at Quoter.QuoteList(IEnumerable syntaxList, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 322
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 254
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.Quote(Object treeElement, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 134
   at Quoter.<QuoteList>b__31_0(Object o) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 323
   at System.Linq.Enumerable.SelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at Quoter.QuoteList(IEnumerable syntaxList, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 322
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 254
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 259
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.Quote(Object treeElement, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 157
   at Quoter.<QuoteList>b__31_0(Object o) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 323
   at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at Quoter.QuoteList(IEnumerable syntaxList, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 322
   at Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 254
   at Quoter.<>c__DisplayClass28_0.<QuotePropertyValues>b__2(PropertyInfo propertyInfo) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 202
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Quoter.QuotePropertyValues(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 199
   at Quoter.QuoteNode(SyntaxNode node, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 165
   at Quoter.Quote(Object treeElement, String name) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 157
   at Quoter.Quote(SyntaxNode node) in C:\RoslynQuoter\src\Quoter\Quoter.cs:line 118
   at QuoterService.Controllers.QuoterController.Get(String sourceText, NodeKind nodeKind, Boolean openCurlyOnNewLine, Boolean closeCurlyOnNewLine, Boolean preserveOriginalWhitespace, Boolean keepRedundantApiCalls, Boolean avoidUsingStatic) in C:\RoslynQuoter\src\Quoter.Web\Controllers\QuoterController.cs:line 38

P.S. Sorry!

But reloading the page and execute the button with the default input also yiled an error (also in another error, so it should not include some corupted session state, if this application use a session at all). So I hope this is a temporary thing.

Wazner commented 6 years ago

This exception only seems to be happening when the "Keep redundant API calls" checkbox is not checked.

KirillOsenkov commented 6 years ago

Yes, removing redundant API calls is very memory intensive, I’ll see what I can do there.

LokiMidgard commented 6 years ago

That's very helpfull. Thank you.

mgravell commented 6 years ago

@KirillOsenkov it looks like any code currently causes a YSOD if that checkbox isn't set - even the class C { } default demo

KirillOsenkov commented 6 years ago

hmm, do I have a memory leak? need to investigate...

KirillOsenkov commented 6 years ago

This should now be fixed. I've stopped using C# Scripting which generated an assembly per each evaluation. I wrote an interpreter that interprets the tree without needing to compile.

It was running out of memory because the appdomain had too many assemblies.