Мы создаем приложение WPF и наблюдаем случайное и очень странное поведение, которое, похоже, происходит из-за BCL. Мы получаем необработанное исключение со следующей трассировкой стека:
[ArgumentException],
"TimeSpan does not accept floating point Not-a-Number values."
at System.TimeSpan.Interval(Double value, Int32 scale)
at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
Теперь, если верить Reflector, вызывающий метод (Dispatcher.Invoke) вызывает
...,TimeSpan.FromSeconds(-1.0),...
, который выдает исключение Argument, потому что передаваемый аргумент возвращает true в double.IsNaN. Это явно не имеет никакого смысла, и мы находим это, по меньшей мере, странным.
Нам не удалось воспроизвести это поведение в каких-либо небольших выборках, поэтому мы ищем способы определить причину этого (и других, по-видимому, связанных исключений TimeSpan, которые также генерируются) в нашем полном приложении. У нас есть ряд вопросов, которые, мы надеемся, кто-то может нам помочь, так как нам не повезло в поисках чего-то подобного
- Кто-нибудь видел такое поведение или распознавал симптомы
- В чем причина этого, казалось бы, случайного поведения в базовой математике, мы как-то портим стек или кучу?
- Можем ли мы каким-то образом отладить IL в TimeSpan.Interval (возможно, WinDbg?), Разбить и проверить стек / кучу для проверки значений?
Наше приложение имеет большой объем данных, с большим количеством асинхронных данных и большим количеством привязок к данным, но мы не видим, чтобы курящий пистолет направил на это что-либо из следов стека, которые нам удалось получить.
Просто чтобы прояснить вопрос: кто-нибудь видел описанное поведение раньше, распознает симптомы или имеет информацию о том, как мы можем отладить ситуацию?
Мысли, комментарии, идеи, предложения?