Hi Intel developers,
After hours of investigations, I've realized that the reason why my software, which is using Google breakpad, is no more reporting crash information seems to be due to the "igdumdim64.dll" DLL (version 184.108.40.2068), coming from the installation of the Intel HD Graphics drivers, that calls the system function SetUnhandledExceptionFilter().
Calling this function results in the handling function installed by breakpad not being registered as an exception handler anymore, and therefore prevents my software from being able to generate crash reports.
It is generally admitted that DLLs shouldn't call SetUnhandledExceptionFilter() for this exact reason: it would interfere with the parent process functionalities.
Could it be possible to remove call(s) to this function from this DLL and maybe instead use __try/ __except statements ?
- GPU Driver
Thank you for posting on the Intel️® communities.
Since you are developing your own software, we would recommend you create an account to submit your inquiry in our Intel®️ Developer Zone, as the document you refer to comes from this website. So, you receive further troubleshooting support and get access to documentation.
Intel®️ Developer Zone - Contact Page
Intel Customer Support Technician
Thank you for providing me with a link to the Developer Zone, but I'm not sure about where I should post my message.
I'm not looking for help about my software, but wanted to report what I consider a bug in the Intel HD Graphics drivers code which is impacting my software.
There are similar posts on this forum about issues with those drivers (see for instance https://community.intel.com/t5/Graphics/igd10iumd64-dll-may-crash-or-freeze-for-D2D-render/m-p/1341957), so I thought it would be the proper place.
Maybe I just need to tag my post with a "GPU driver" label ?
We appreciate your response.
We will do further research on this matter and post the response on this thread once available.
Intel Customer Support Technician
Thank you very much for looking into this issue, since I suspect it might also affect other softwares that rely on the SetUnhandledExceptionFilter() function to report application crashes.
If it could be of any help, here is an excerpt of the call stack of a test program, where I modified breakpad's code to put a hook on "kernel32.dll" so a RedirectedSetUnhandledExceptionFilter() function is called instead of the system SetUnhandledExceptionFilter() function, and a minidump is written:
Thread 0 (crashed) 0 test.exe!google_breakpad::ExceptionHandler::WriteMinidump() [exception_handler.cc : 774 + 0x0] rax = 0x000000ed917da6d0 rdx = 0x0000000000000010 rcx = 0x000000ed917da6d0 rbx = 0x0000022c633e61e0 rsi = 0x0000000000000000 rdi = 0x0000022c633e61e0 rbp = 0x000000ed917dac99 rsp = 0x000000ed917da5f0 r8 = 0x00000000000000c0 r9 = 0x00000000000000c0 r10 = 0x00007ffe60f90000 r11 = 0x00007ffe60f91b4b r12 = 0x0000000000000000 r13 = 0x0000000080070057 r14 = 0x000000ed917dad88 r15 = 0x00007ffe6a5e2400 rip = 0x00007ff626957d55 Found by: given as instruction pointer in context 1 test.exe!google_breakpad::ExceptionHandler::RedirectedSetUnhandledExceptionFilter(long ) [exception_handler.cc : 1112 + 0x8] rbx = 0x0000022c633e61e0 rbp = 0x000000ed917dac99 rsp = 0x000000ed917dabc0 r12 = 0x0000000000000000 r13 = 0x0000000080070057 r14 = 0x000000ed917dad88 r15 = 0x00007ffe6a5e2400 rip = 0x00007ff626957b1e Found by: call frame info 2 igdumdim64.dll + 0xadfa rbx = 0x0000022c633e61e0 rbp = 0x000000ed917dac99 rsp = 0x000000ed917dabf0 r12 = 0x0000000000000000 r13 = 0x0000000080070057 r14 = 0x000000ed917dad88 r15 = 0x00007ffe6a5e2400 rip = 0x00007ffe6a4cadfa Found by: call frame info 3 igdumdim64.dll + 0x122400 rbp = 0x000000ed917dac99 rsp = 0x000000ed917dac18 rip = 0x00007ffe6a5e2400 Found by: stack scanning 4 0x7ffe6a4c0000 rbp = 0x000000ed917dac99 rsp = 0x000000ed917dac60 rip = 0x00007ffe6a4c0000 Found by: stack scanning 5 d3d9.dll + 0x15c490 rbp = 0x000000ed917dac99 rsp = 0x000000ed917dac68 rip = 0x00007ffe0fcec490 Found by: stack scanning
... 0x7ffe6a4c0000 - 0x7ffe6a661fff igdumdim64.dll 220.127.116.118 (WARNING: No symbols, igdumdim64.pdb, 6302DFFCB1024795B7B35EE2880666911)
Thanks for your feedback on our graphics drivers. We have shared the information given. We will pass the information on to the corresponding team in charge. Let us know if you have any questions.
If you still require assistance, please, refer to the Intel Developer Zone for further support.
Intel Customer Support Technician
We hope you are doing fine.
We have not heard back from you. So we will close this thread. If you need any additional information, submit a new question, as this thread will no longer be monitored.
Intel Customer Support Technician.
We were investigating the same issue as the original author of this thread. We found that our application crash reporter doesn't work on some machines. We traced the issue to your drivers. You are breaking all 3rd party apps that runs on machines with Inter driver and they can't use Crash Reporting. Please consider removing this code.
To other developers affected by this: I managed to find a workaround for the Qt application we are working on. The backtrace there was something like this:
> kernel32.dll!SetUnhandledExceptionFilterStub() Unknown
qwindowsd.dll!QDirect3D9Handle::QDirect3D9Handle() Line 108 C++
qwindowsd.dll!GpuDescription::detect() Line 128 C++
qwindowsd.dll!QWindowsWindow::forcedScreenForGLWindow(const QWindow * w) Line 1519 C++
qwindowsd.dll!calcPosition(const QWindow * w, const QSharedPointer<QWindowCreationContext> & context, const QMargins & invMargins) Line 576 C++
qwindowsd.dll!WindowCreationData::create(const QWindow * w, const QWindowsWindowData & data, QString title) Line 800 C++
qwindowsd.dll!QWindowsWindowData::create(const QWindow * w, const QWindowsWindowData & parameters, const QString & title) Line 1557 C++
qwindowsd.dll!QWindowsIntegration::createPlatformWindow(QWindow * window) Line 348 C++
Qt5Guid.dll!QWindowPrivate::create(bool recursive, unsigned __int64 nativeHandle) Line 527 C++
Qt5Guid.dll!QWindow::create() Line 651 C++
Qt5Widgetsd.dll!QWidgetPrivate::create() Line 1316 C++
Qt5Widgetsd.dll!QWidget::create(unsigned __int64 window, bool initializeWindow, bool destroyOldWindow) Line 1182 C++
Qt5Widgetsd.dll!QWidgetPrivate::setVisible(bool visible) Line 8065 C++
Qt5Widgetsd.dll!QWidget::setVisible(bool visible) Line 8044 C++
Qt5Widgetsd.dll!QWidget::show() Line 7670 C++
ex_crashdump.exe!main(int argc, char * * argv) Line 27 C++
By overriding the QApplication::notify (a global event filter could work too), we can get notified about the first PlatformSurface. After handling this, I'm now blindly re-applying the call to SetUnhandledExceptionFilter from breakpad, to ensure its handler is taking precedence over the Intel GPU driver handler. This seems to work in early testing, and we can continue to install the event handler early, minimizing the time frame where no crash reports would be caught by us.
Hope that helps!
But one way or another, the Intel GPU driver code really needs to be fixed, it's clearly bad/wrong to call this windows API in such a central dll, totally breaking crash reporting tools!