Общая ошибка GDI + с ThreadExceptionDialog в трассировке стека - PullRequest
0 голосов
/ 30 апреля 2009

Мы получили несколько трудно воспроизвести сообщения об ошибках. Пользователи получают сообщение «Произошла ошибка. Приложение будет закрыто». окно сообщения, а затем приложение закрывается.

В Main () я записываю исключение в файл журнала:

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Image.FromHbitmap(IntPtr hbitmap, IntPtr hpalette)
at System.Drawing.Image.FromHbitmap(IntPtr hbitmap)
at System.Drawing.Icon.ToBitmap()
at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t)
at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t)
at System.Windows.Forms.Control.WndProcException(Exception e)
at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e)
at System.Windows.Forms.NativeWindow.Callback(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 Wfm.AppMain.Main()

Что меня смущает, так это то, что ThreadExceptionDialog находится в трассировке стека. Я полагаю, что это диалоговое окно, в котором отображается сообщение «Произошла ошибка. Приложение завершится». сообщение.

Это не связанная ошибка или диалоговое окно перебрасывает исключение? Как я могу получить оригинальное исключение?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2009

Похоже, что был вызван метод OnThreadException, что означает, что вы должны иметь возможность настроить обработчик события Application.ThreadException , чтобы более подробно изучить исключение. 1003 *

1 голос
/ 30 апреля 2009

Вам нужен файл дампа, затем используйте SOS, чтобы получить все объекты исключений, которые находятся в стеке.
Кстати, какова ситуация с ресурсами на этой машине? Похоже, что приложение не может преобразовать значок в растровое изображение, что может произойти под чрезвычайным давлением ресурсов.

Вы можете создать дамп, используя ADPlus в режиме зависания, один раз вы увидите окно исключения.

...