偶尔的JVM在本机代码深处从FileDialog.open()崩溃

Cal*_*lon 1 java eclipse windows swt eclipse-rcp

我目前面临的是我们在Windows 2008服务器R2上的Citrix环境中运行的一些Eclipse应用程序中的异常访问冲突.

调用开始org.eclipse.swt.widgets.FileDialog.open(),调用方法org.eclipse.swt.internal.win32.OS.GetSaveFileNameW然后转到本机库.它失败,并# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x68931bab, pid=9208, tid=7616siginfo: ExceptionCode=0xc0000005, ExceptionInformation=0x00000008 0x68931bab

分析创建的minidump,我结束了 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
Run Code Online (Sandbox Code Playgroud)

这在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
[..]
Run Code Online (Sandbox Code Playgroud)

VM参数是:

jvm_args: -Dorg.eclipse.springextensionfactory.timeout=60000 -Xms128m -Xmx512m -Djava.util.Arrays.useLegacyMergeSort=true 
java_command: <unknown>
Launcher Type: generic
Run Code Online (Sandbox Code Playgroud)

系统是:

---------------系统---------------

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
Run Code Online (Sandbox Code Playgroud)

麻烦的是,问题很少发生.我们目前无法不断重现这个问题.它不时发生.我目前的猜测是,thumbcache.dll尝试创建ThumbnailCache的实例,由于某种原因不允许这样做.但我在windows领域的知识非常有限.有谁知道这个问题可能来自哪里?

Baz*_*Baz 5

我发现这个错误报告似乎与你所看到的非常相似.它标记为无法修复,但有一个解决方法建议:

我将关闭这个"不会修复",这只是意味着我们不打算尝试在swt代码中解决它.

我还在eclipse 3.3发行说明中添加了以下项目:

打开文件对话框崩溃eclipse(仅限Vista)在Vista上,使用-vmargs -Xmx [任何大小]启动eclipse可能会在FileDialog打开时崩溃.解决方法是使用默认堆大小,即不要使用-Xmx VM args.有关详细信息,请参阅错误188317.


它说"只有Vista",但截至发布时,Windows Server 2008 R2甚至不存在,所以我至少试一试......


此错误报告中的另一条评论指出:

我的错误只发生在我从PopupDialog打开带有shell的FileDialog时.

你的程序就是这种情况吗?