Страница 2 из 2
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 15 сен 2015, 08:53
HighAley
Здравствуйте.
Вы смотрели журнал событий Windows?
Может там будет больше информации по ошибке.
Спасибо.
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 15 сен 2015, 11:30
Michael
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 16 сен 2015, 02:01
Ivan
Здравствуйте.
Взглянули на проблему свежим взглядом.
Красный крест вместо содержимого контрола отображается системой (Net Framework) в том случае, если во время отрисовки контрола произошёл exception.
Т.е. проблема не в рендеринге отчёта, а где-то во вьювере при отображении уже построенного отчета.
Это подтверждается и тем, что в логе ошибок рендеринга нет.
Далее, обратили внимание на следующие цитаты:
У меня отчет открывается нормально если уменьшить у проблемного отчета масштаб до 54% и ниже.
То в следующий раз отчет открывается правильно. с масштабом 54%
....
5. Вероятность возникновения ошибки: 0%
6. Разрешение 1920х1080
....
5. Вероятность возникновения ошибки: 100% при масштабе больше 75%
6. Разрешение 1280х1024
Возможно проблема проявляется при каком-то определенном размере окна вьювера.
Попробуйте пожалуйста воспроизвести проблему при изменении размеров окна вьювера или при изменении разрешения экрана.
Спасибо.
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 16 сен 2015, 10:03
Michael
Эксперименты с разными разрешениями/размерами экрана на стабильно работающей системе ничего не дали.
Покопался в настройках IntelliTrace и в итоге удалось воспроизвести ошибку. Поймал два разных эксепшена:
Код: Выделить всё
System.NullReferenceException: Object reference not set to an instance of an object.
at Stimulsoft.Report.Viewer.StiViewerControl.GetPageRect(StiPageParamView view)
at Stimulsoft.Report.Viewer.StiViewerControl.view_MouseMove(Object sender, MouseEventArgs e)
at System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseMove(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Код: Выделить всё
at Stimulsoft.Report.Viewer.StiViewerControl.GetPageParamView(StiComponent component)
at Stimulsoft.Report.Viewer.StiViewerControl.view_MouseMove(Object sender, MouseEventArgs e)
at System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseMove(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at PrintStore.Program.Main(String[] args) in D:\Projects\PrintStore\Current\PrintStore\Program.cs:line 41
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 18 сен 2015, 10:40
Ivan
Здравствуйте.
Michael писал(а):Эксперименты с разными разрешениями/размерами экрана на стабильно работающей системе ничего не дали.
Покопался в настройках IntelliTrace и в итоге удалось воспроизвести ошибку. Поймал два разных эксепшена:
Ошибки возникают в простых методах, но непонятно, какие именно свойства приходят нулевыми.
Уточните пожалуйста, вы смогли воспроизвести проблему именно на вашем компьютере?
Можете ли описать как воспроизвести эту проблему у нас? На исходниках эту проблему решить гораздо проще и быстрее.
Также мы можем вам выслать специально собранный билд в Demo режиме со включенной отладочной информацией, чтобы определить точные строки, где происходят ошибки.
Спасибо.
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 18 сен 2015, 11:12
Michael
Я сейчас делаю code review модуля управления отчетами. Постараюсь вычленить код, приводящий к ошибке, и собрать из этого отдельный исходник. Ну или найду ошибку в своем коде. Просто эту часть программы писал другой человек несколько лет назад, поэтому сейчас нет возможности быстро в этом коде сориентироваться.
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 18 сен 2015, 17:03
HighAley
Здравствуйте.
Мы ждём любой информации от вас, которая поможет решить проблему.
Спасибо.
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 28 сен 2015, 19:31
Michael
Проблему устранил. По своему старому коду сделал много исправлений, даже не понял, что именно повлияло.
На всякий случай - мне сильно помогла возможность записи в IntelliTrace. Особенно это помогает с многопоточностью. После отработки программы открываешь созданный файл и все эксепшены как на ладони.
Re: Как перехватить эксепшен при формировании превью?
Добавлено: 29 сен 2015, 09:58
HighAley
Здравствуйте.
Отлично! IntelliTrace и создано для решения подобных проблем.
Обращайтесь, если ещё нужна будет помощь.
Спасибо.