Иногда происходит сбой JVM из FileDialog.open () глубоко в нативном коде

1

В настоящее время я сталкиваюсь с нарушением доступа к исключению в некоторых приложениях Eclipse, которые мы запускаем в среде Citrix на сервере Windows 2008 R2.

Вызов начинается с org.eclipse.swt.widgets.FileDialog.open(), который вызывает методы в org.eclipse.swt.internal.win32.OS.GetSaveFileNameW а затем переходит к родным библиотекам. Он не работает с # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x68931bab, pid=9208, tid=7616 с помощью siginfo: ExceptionCode=0xc0000005, ExceptionInformation=0x00000008 0x68931bab

Анализируя созданный thumbcache.dll, я заканчиваю thumbcache.dll

thumbcache.dll!CThumbnailCache::CThumbnailCache(int)    Unknown
thumbcache.dll!ThumbnailCacheCreateInstance(int,struct _GUID const &,void * *)  Unknown
thumbcache.dll!CThumbCacheClassFactory::CreateInstance(struct IUnknown *,struct _GUID const &,void * *) Unknown
ole32.dll!CServerContextActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) Line 1000  C++
ole32.dll!ActivationPropertiesIn::DelegateCreateInstance(IUnknown * pUnkOuter, IActivationPropertiesOut * * ppActPropsOut) Line 1917    C++
ole32.dll!CApartmentActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties)    C++
ole32.dll!CProcessActivator::CCICallback(unsigned long dwContext, IUnknown * pUnkOuter, ActivationPropertiesIn * pActIn, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) Line 1737 C++
ole32.dll!CProcessActivator::AttemptActivation(ActivationPropertiesIn * pActIn, IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties, HRESULT (unsigned long, IUnknown *, ActivationPropertiesIn *, IActivationPropertiesIn *, IActivationPropertiesOut * *) * pfnCtxActCallback, unsigned long dwContext) Line 1630   C++
ole32.dll!CProcessActivator::ActivateByContext(ActivationPropertiesIn * pActIn, IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties, HRESULT (unsigned long, IUnknown *, ActivationPropertiesIn *, IActivationPropertiesIn *, IActivationPropertiesOut * *) * pfnCtxActCallback) Line 1487    C++
ole32.dll!CProcessActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) Line 1377    C++
ole32.dll!ActivationPropertiesIn::DelegateCreateInstance(IUnknown * pUnkOuter, IActivationPropertiesOut * * ppActPropsOut) Line 1917    C++
ole32.dll!CClientContextActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) Line 685   C++
ole32.dll!ActivationPropertiesIn::DelegateCreateInstance(IUnknown * pUnkOuter, IActivationPropertiesOut * * ppActPropsOut) Line 1917    C++
ole32.dll!ICoCreateInstanceEx(const _GUID & Clsid, IUnknown * punkOuter, unsigned long dwClsCtx, _COSERVERINFO * pServerInfo, unsigned long dwCount, unsigned long dwActvFlags, tagMULTI_QI * pResults, ActivationPropertiesIn * pActIn) Line 1334  C++
ole32.dll!CComActivator::DoCreateInstance(const _GUID & Clsid, IUnknown * punkOuter, unsigned long dwClsCtx, _COSERVERINFO * pServerInfo, unsigned long dwCount, tagMULTI_QI * pResults, ActivationPropertiesIn * pActIn) Line 332  C++
ole32.dll!CoCreateInstanceEx(const _GUID & Clsid, IUnknown * punkOuter, unsigned long dwClsCtx, _COSERVERINFO * pServerInfo, unsigned long dwCount, tagMULTI_QI * pResults) Line 157    C++
ole32.dll!CoCreateInstance(const _GUID & rclsid, IUnknown * pUnkOuter, unsigned long dwContext, const _GUID & riid, void * * ppv) Line 110  C++
shell32.dll!_GetUIThreadThumbnailCache@8()  Unknown
shell32.dll!CDefView::CreateViewWindow3(struct IShellBrowser *,struct IShellView *,unsigned long,enum FOLDERFLAGS,enum FOLDERFLAGS,enum FOLDERVIEWMODE,struct _GUID const *,struct tagRECT const *,struct HWND__ * *)   Unknown
shell32.dll!CExplorerBrowser::_CreateViewWindow(struct tagRECT const *,struct HWND__ * *)   Unknown
shell32.dll!CExplorerBrowser::_SwitchView(struct IShellFolder *,struct _ITEMIDLIST_ABSOLUTE const *,int)    Unknown
shell32.dll!CExplorerBrowser::_BrowseToView(struct _ITEMIDLIST_ABSOLUTE const *,int)    Unknown
shell32.dll!CExplorerBrowser::_BrowseObjectInternal(struct _ITEMIDLIST_RELATIVE const *,unsigned int)   Unknown
shell32.dll!CExplorerBrowser::_OnBrowseObject(void) Unknown
shell32.dll!CExplorerBrowser::BrowseObject(struct _ITEMIDLIST_RELATIVE const *,unsigned int)    Unknown
comdlg32.dll!CFileOpenSave::_BrowseObject(struct _ITEMIDLIST_RELATIVE const *,unsigned int) Unknown
comdlg32.dll!CFileOpenSave::_JumpToInitialLocation(void)    Unknown
comdlg32.dll!CFileOpenSave::_InitOpenSaveDialog(struct HWND__ *)    Unknown
comdlg32.dll!CFileOpenSave::s_OpenSaveDlgProc(struct HWND__ *,unsigned int,unsigned int,long)   Unknown
user32.dll!_InternalCallWinProc@20()    Unknown
user32.dll!_UserCallDlgProcCheckWow@32()    Unknown
user32.dll!_DefDlgProcWorker@24()   Unknown
user32.dll!_SendMessageWorker@24()  Unknown
user32.dll!_InternalCreateDialog@28()   Unknown
user32.dll!_InternalDialogBox@24()  Unknown
user32.dll!_DialogBoxIndirectParamAorW@24() Unknown
user32.dll!_DialogBoxIndirectParamW@20()    Unknown
comdlg32.dll!CFileOpenSave::Show(struct HWND__ *)   Unknown
comdlg32.dll!_InvokeNewFileOpenSave(struct IFileDialog *,unsigned short,struct HWND__ *,struct _OFNINITINFO *,struct HWND__ *)  Unknown
comdlg32.dll!_CreateNewFileOpenSaveInProc(unsigned short,struct HWND__ *,struct _OFNINITINFO *) Unknown
comdlg32.dll!NewGetFileName(struct OPENFILEINFO *,int)  Unknown
comdlg32.dll!_NewGetSaveFileName@4()    Unknown
comdlg32.dll!_GetFileName@8()   Unknown
comdlg32.dll!_GetSaveFileNameW@4()  Unknown

Это продолжается в файле hs_err_pid:

C  [comdlg32.dll+0x3a3c9]
C  [swt-win32-3740.dll+0x7536]
j  org.eclipse.swt.internal.win32.OS.GetSaveFileNameW(Lorg/eclipse/swt/internal/win32/OPENFILENAME;)Z+0
j  org.eclipse.swt.internal.win32.OS.GetSaveFileName(Lorg/eclipse/swt/internal/win32/OPENFILENAME;)Z+7
j  org.eclipse.swt.widgets.FileDialog.open()Ljava/lang/String;+882
[..]

Аргументы VM:

jvm_args: -Dorg.eclipse.springextensionfactory.timeout=60000 -Xms128m -Xmx512m -Djava.util.Arrays.useLegacyMergeSort=true 
java_command: <unknown>
Launcher Type: generic

Система:

--------------- СИСТЕМА ---------------

OS: Windows NT 6.1 , 64 bit Build 7601 Service Pack 1

CPU:total 32 (8 cores per cpu, 2 threads per core) family 6 model 62 stepping 4, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, erms, ht, tsc, tscinvbit

Memory: 4k page, physical 150912848k(141091384k free), swap 152959000k(142953452k free)

vm_info: Java HotSpot(TM) Client VM (24.51-b03) for windows-x86 JRE (1.7.0_51-b13), built on Dec 18 2013 19:09:58 by "java_re" with unknown MS VC++:1600

Проблема в том, что проблема возникает нечасто. В настоящее время мы не можем постоянно воспроизводить проблему. Время от времени это происходит. Моя текущая догадка заключается в том, что thumbcache.dll пытается создать экземпляр ThumbnailCache, который по какой-то причине ему не разрешено делать. Но мои знания в области окон довольно ограничены. Кто-нибудь есть идея, откуда эта проблема может возникнуть?

Теги:
eclipse-rcp
swt

2 ответа

1
Лучший ответ

Скорее всего, проблема заключалась в том, чтобы исключить исполняемые файлы DEP (Предотвращение выполнения данных) в Windows (System-> Дополнительно → (Производительность) Настройки → Параметры производительности).

Мы включили "Включить DEP для всех программ и служб, кроме тех, которые я выбрал", и мне пришлось добавить эти программы в DEP. Никаких сообщений о сбоях в течение недели нет. Поэтому я добавлю это как ответ и обновление, если что-то изменится.

5

Я нашел этот отчет об ошибке, который, похоже, очень похож на то, что вы видите. Он помечен как не будет исправлен, однако есть обходное предложение:

Я собираюсь закрыть это как "не исправить", что просто означает, что мы не будем пытаться обойти его в swt-коде.

Я также добавил следующий элемент в примечания к выпуску eclipse 3.3:

Диалоговое окно "Открытие файла" приводит к сбою eclipse (только для Vista). В Vista запуск затмения с использованием -vmargs -Xmx [любого размера] может привести к сбою затмения при открытии FileDialog. Обходным путем является использование размера кучи по умолчанию, то есть не используйте аргументы VM -Xmx VM. См. Исправление 188317.


Он говорит только "Vista", но к тому времени, когда он был опубликован, Windows Server 2008 R2 даже не существовал, поэтому я бы попробовал хотя бы...


Еще один комментарий в этом сообщении об ошибке:

Моя ошибка возникает только при открытии FileDialog с оболочкой из PopupDialog.

Это в вашей программе?

  • 0
    Спасибо за поиск. Да, в прошлом были проблемы с этим FileDialog. К сожалению, этот случай не совпадает. Даже если обходной путь с параметром Xmx указывает в том же направлении. Однако мой FileDialog не всегда срабатывает (иногда) в каждом приложении Rich Client, которое мы запускаем в этой системе. Отключение параметра Xmx просто не подходит для нас. Так что, к сожалению, предложенный обходной путь не помогает. В настоящее время я тестирую некоторые настройки Windows DEP.
  • 0
    @Calon Что вы подразумеваете под "мой FileDialog " , вы используете пользовательскую реализацию?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню