Не удалось найти основную причину ArgumentException - PullRequest
0 голосов
/ 01 мая 2019

Я исследую причину огромного количества ArgumentException в приложении (и я подозреваю, что его основная причина для фрагментации памяти / исключения из памяти).Проблема в том, что я не могу найти, откуда это исключение.

У меня есть дамп памяти проблемного сервиса, но я вижу только то, что это произошло в одном из потоков и связано с отражением, кроме того, что мне кажется, что я не могу найти причинуисключения.

ArgumentException подробности:

Exception type:   System.ArgumentException
Message:          Missing parameter does not have a default value.
InnerException:   <none>
StackTrace (generated):
    SP       IP       Function
    0347D2F0 72B006F2 mscorlib_ni!System.Reflection.MethodBase.CheckArguments(System.Object[], System.Reflection.Binder, System.Reflection.BindingFlags, System.Globalization.CultureInfo, System.Signature)+0xc27c02
    0347D328 71EC0EDB mscorlib_ni!System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0x9b
    0347D35C 71EC0DD7 mscorlib_ni!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0x37
    0347D390 71EC0D8E mscorlib_ni!System.Reflection.RuntimePropertyInfo.GetValue(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0x3e

StackTraceString: <none>
HResult: 80070057

Вывод ~#s; !clrstack:

OS Thread Id: 0x524 (1)
Child SP       IP Call Site
033fcf00 7726a8fc [HelperMethodFrame: 033fcf00] 
033fcfb0 72b006f2 System.Reflection.MethodBase.CheckArguments(System.Object[], System.Reflection.Binder, System.Reflection.BindingFlags, System.Globalization.CultureInfo, System.Signature)
033fcfe8 71ec0edb System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
033fd01c 71ec0dd7 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
033fd050 71ec0d8e System.Reflection.RuntimePropertyInfo.GetValue(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
033fda64 730eebe6 [DebuggerU2MCatchHandlerFrame: 033fda64] 
033fda34 730eebe6 [GCFrame: 033fda34] 
033fda18 730eebe6 [GCFrame: 033fda18] 

Как узнать, откуда появилось это исключение?Похоже, это недостающая часть трассировки стека.

1 Ответ

3 голосов
/ 01 мая 2019

Согласно документации Microsoft, метод PropertyInfo.GetValue() выдает ArgumentException, когда выполняется одно из следующих условий:

"Массив индекса не содержит требуемый тип аргументов.

-или-

Получатель доступа к свойству не найден. "

Я бы искал любые вызовы в исходном коде, которые вызывают GetValue(), и проверял бы передаваемые им аргументы. Один из двух описанных выше сценариев, вероятно, является виновником.

...