Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is my stack trace missing steps?

My logged stack trace seems to be missing a step.

private void StartLoadingResources(DataService separateDataService)
{
    ...
    batchResource.Resources.Add(key, new List<string>());
    // batchResource.Resources is the Dictionary object involved
    ...
}

Why has the stack trace gone straight from StartLoadingResources to Insert (missing the Add step)?

System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at MyApp.Importer.StartLoadingResources(DataService separateDataService) in ****\MyApp\MyApp\Importer.cs:line 313
   at MyApp.Importer.<Execute>b__5() in ****\MyApp\MyApp\Importer.cs:line 142
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at MyApp.Importer.Execute() in ****\MyApp\MyApp\Importer.cs:line 157
   at MyApp.Program.Execute() in ****\MyApp\MyApp\Program.cs:line 252
   at MyApp.Program.Main(String[] args) in ****\MyApp\MyApp\Program.cs:line 47
---> (Inner Exception #0) System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at MyApp.Importer.StartLoadingResources(DataService separateDataService) in ****\MyApp\MyApp\Importer.cs:line 313
   at MyApp.Importer.<Execute>b__5() in ****\MyApp\MyApp\Importer.cs:line 142
   at System.Threading.Tasks.Task.Execute()<---

The code is compiled as Debug, with "Optimize code" in Build options left unchecked.

like image 886
Lee Avatar asked Nov 09 '22 01:11

Lee


1 Answers

The Add method on Dictionary<TKey, TValue> simply calls Insert, given that it's a 1 line method, the compiler has simply inlined that method call as it is so trivial even without optimizations enabled.

like image 93
Trevor Pilley Avatar answered Nov 14 '22 23:11

Trevor Pilley