gpt4 book ai didi

debugging - OpenGL 抑制基于 MFC 对话框的应用程序中的异常

转载 作者:行者123 更新时间:2023-12-04 20:25:05 27 4
gpt4 key购买 nike

我有一个用 MSVS2005 创建的 MFC 驱动的基于对话框的应用程序。这是我的问题一步一步。我的对话框上有按钮和相应的点击处理程序,代码如下:

int* i = 0;
*i = 3;

我正在运行程序的调试版本,当我单击按钮时,Visual Studio 捕获焦点并警告“访问冲突写入位置”异常,程序无法从错误中恢复,我所能做的就是停止调试。这是正确的行为。

现在我在 OnInitDialog() 中添加了一些 OpenGL 初始化代码方法:
    HDC DC = GetDC(GetSafeHwnd());
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};

int pixelformat = ChoosePixelFormat(DC, &pfd);
SetPixelFormat(DC, pixelformat, &pfd);

HGLRC hrc = wglCreateContext(DC);
ASSERT(hrc != NULL);
wglMakeCurrent(DC, hrc);

当然这不完全是我所做的,它是我代码的简化版本。那么现在奇怪的事情开始发生了:所有的初始化都很好, OnInitDialog() 中没有错误。 ,但是当我单击按钮时......不会抛出任何异常。没发生什么事。在所有。如果我在 *i = 3; 处设置断点并按 F11,处理程序函数立即停止,焦点返回到应用程序,继续正常工作。我可以再次单击按钮,同样的事情会发生。

似乎有人处理了发生的访问冲突异常,并悄悄地将执行返回到主应用程序消息接收周期。

如果我评论该行 wglMakeCurrent(DC, hrc); ,一切都像以前一样正常,抛出异常,Visual Studio 捕获它并显示带有错误消息的窗口,之后必须终止程序。

我在安装了网站的最新驱动程序(11.01.2010)的 Windows 7 64 位、NVIDIA GeForce 8800 下遇到此问题。我的同事使用 Windows Vista 32 位并且没有这样的问题 - 在这两种情况下都会抛出异常并且应用程序崩溃。

好吧,希望好心人能帮助我:)

PS 这个问题原来是在 this下贴出来的话题。

最佳答案

好的,我发现了一些关于此的更多信息。就我而言,安装的是 Windows 7 KiUserCallbackExceptionHandler 作为异常处理程序,在调用我的 WndProc 并给我执行控制之前。这是由 完成的ntdll!KiUserCallbackDispatcher .我怀疑这是微软为防止黑客入侵 SEH 而采取的安全措施。

解决方案是用 try/except 框架包装 wndproc(或 hookproc),以便您可以在 Windows 之前捕获异常。

感谢 Skywing http://www.nynaeve.net/

We've contacted nVidia about this issue, but they say it's not their bug, but rather the Microsoft's. Could you please tell how you located the exception handler? And do you have some additional information, e.g. some feedbacks from Microsoft?



我在 WinDbg 中使用了“!exchain”命令来获取此信息。

关于debugging - OpenGL 抑制基于 MFC 对话框的应用程序中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com