Как перехватить эксепшен при формировании превью?

Обсуждение Stimulsoft Reports.NET
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Как перехватить эксепшен при формировании превью?

Сообщение HighAley »

Здравствуйте.

Вы смотрели журнал событий Windows?
Может там будет больше информации по ошибке.

Спасибо.
Michael
Сообщения: 24
Зарегистрирован: 21 июн 2006, 15:59
Откуда: Russia, Moscow
Контактная информация:

Re: Как перехватить эксепшен при формировании превью?

Сообщение Michael »

Там тоже ничего нет: http://www.printstore.ru/forum/viewtopi ... =5011#5011
Любой путь начинается с первого шага
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Как перехватить эксепшен при формировании превью?

Сообщение Ivan »

Здравствуйте.

Взглянули на проблему свежим взглядом.

Красный крест вместо содержимого контрола отображается системой (Net Framework) в том случае, если во время отрисовки контрола произошёл exception.
Т.е. проблема не в рендеринге отчёта, а где-то во вьювере при отображении уже построенного отчета.
Это подтверждается и тем, что в логе ошибок рендеринга нет.

Далее, обратили внимание на следующие цитаты:
У меня отчет открывается нормально если уменьшить у проблемного отчета масштаб до 54% и ниже.
То в следующий раз отчет открывается правильно. с масштабом 54%
....
5. Вероятность возникновения ошибки: 0%
6. Разрешение 1920х1080
....
5. Вероятность возникновения ошибки: 100% при масштабе больше 75%
6. Разрешение 1280х1024
Возможно проблема проявляется при каком-то определенном размере окна вьювера.
Попробуйте пожалуйста воспроизвести проблему при изменении размеров окна вьювера или при изменении разрешения экрана.

Спасибо.
Michael
Сообщения: 24
Зарегистрирован: 21 июн 2006, 15:59
Откуда: Russia, Moscow
Контактная информация:

Re: Как перехватить эксепшен при формировании превью?

Сообщение 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()
Любой путь начинается с первого шага
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Как перехватить эксепшен при формировании превью?

Сообщение Ivan »

Здравствуйте.
Michael писал(а):Эксперименты с разными разрешениями/размерами экрана на стабильно работающей системе ничего не дали.
Покопался в настройках IntelliTrace и в итоге удалось воспроизвести ошибку. Поймал два разных эксепшена:
Ошибки возникают в простых методах, но непонятно, какие именно свойства приходят нулевыми.
Уточните пожалуйста, вы смогли воспроизвести проблему именно на вашем компьютере?
Можете ли описать как воспроизвести эту проблему у нас? На исходниках эту проблему решить гораздо проще и быстрее.
Также мы можем вам выслать специально собранный билд в Demo режиме со включенной отладочной информацией, чтобы определить точные строки, где происходят ошибки.

Спасибо.
Michael
Сообщения: 24
Зарегистрирован: 21 июн 2006, 15:59
Откуда: Russia, Moscow
Контактная информация:

Re: Как перехватить эксепшен при формировании превью?

Сообщение Michael »

Я сейчас делаю code review модуля управления отчетами. Постараюсь вычленить код, приводящий к ошибке, и собрать из этого отдельный исходник. Ну или найду ошибку в своем коде. Просто эту часть программы писал другой человек несколько лет назад, поэтому сейчас нет возможности быстро в этом коде сориентироваться.
Любой путь начинается с первого шага
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Как перехватить эксепшен при формировании превью?

Сообщение HighAley »

Здравствуйте.

Мы ждём любой информации от вас, которая поможет решить проблему.

Спасибо.
Michael
Сообщения: 24
Зарегистрирован: 21 июн 2006, 15:59
Откуда: Russia, Moscow
Контактная информация:

Re: Как перехватить эксепшен при формировании превью?

Сообщение Michael »

Проблему устранил. По своему старому коду сделал много исправлений, даже не понял, что именно повлияло.

На всякий случай - мне сильно помогла возможность записи в IntelliTrace. Особенно это помогает с многопоточностью. После отработки программы открываешь созданный файл и все эксепшены как на ладони.
Любой путь начинается с первого шага
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Как перехватить эксепшен при формировании превью?

Сообщение HighAley »

Здравствуйте.

Отлично! IntelliTrace и создано для решения подобных проблем.
Обращайтесь, если ещё нужна будет помощь.

Спасибо.
Ответить