Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调试器忽略动态加载的DLL中的错误_C++_Dll_Visual Studio 2005_Mfc_Debugging - Fatal编程技术网

C++ 调试器忽略动态加载的DLL中的错误

C++ 调试器忽略动态加载的DLL中的错误,c++,dll,visual-studio-2005,mfc,debugging,C++,Dll,Visual Studio 2005,Mfc,Debugging,我有一个与调试自编码DLL有关的非常奇怪的问题。我有一个MFC驱动的基于对话框的应用程序,几个静态链接的项目和几个运行时加载的DLL项目 我在调试中构建解决方案,运行应用程序,并且可以轻松调试这些DLL项目。现在问题来了。如果DLL中存在如下明显的运行时错误 int* i = 0; *i = 4; 调试器不会断言任何错误,不会抛出任何异常,并以静默方式返回到空闲状态,甚至不会返回(可见)堆栈。它看起来像是当我在语句中点击F10时,*I=4,控件返回到主应用程序窗口,程序继续执行,因为没有发生任

我有一个与调试自编码DLL有关的非常奇怪的问题。我有一个MFC驱动的基于对话框的应用程序,几个静态链接的项目和几个运行时加载的DLL项目

我在调试中构建解决方案,运行应用程序,并且可以轻松调试这些DLL项目。现在问题来了。如果DLL中存在如下明显的运行时错误

int* i = 0;
*i = 4;
调试器不会断言任何错误,不会抛出任何异常,并以静默方式返回到空闲状态,甚至不会返回(可见)堆栈。它看起来像是当我在语句中点击F10时,
*I=4,控件返回到主应用程序窗口,程序继续执行,因为没有发生任何事情!如果代码中没有错误,则执行良好。但我希望在这种情况下可以断言错误!它们在主应用程序的代码中

我使用LoadLibrary()函数将DLL加载到应用程序中。DLL本身有MFC静态链接,和解决方案中的其他项目一样


有什么想法吗?甚至不知道谷歌有什么问题…

很可能是从错误的位置加载带有LoadLibrary()的DLL,并且缺少PDB会阻止调试器设置断点。您也可以在禁用断言的情况下加载零售DLL(如果“要断言的错误”表示您在代码中有断言)。如果错误是页面错误(如示例中显示的AV),并且调试器没有中断,则表示已处理异常。你总是可以一有机会就开始休息。不确定如何从代码编辑工具执行此操作,但您始终可以使用。

在您的代码库中的某个地方有一个异常处理程序正在吞咽异常。首先查找SetUnhandledExceptionFilter。另外:调试+异常,Win32异常,勾选抛出的复选框。

哦,这个错误似乎与DLL完全无关。调试器在主应用程序模块中的行为方式也相同。我已将此代码段插入到OnInitDialog()函数和按钮单击OnBnClickedButton1()处理程序函数中

在第一种情况下(在OnInitDialog()内),异常会像往常一样抛出,程序无法从该错误中恢复。在输出窗口中跟踪以下消息:

0x00a3a83e处的首次机会异常 在dmc.exe中:0xC0000005:访问 违反写入位置0x00000000

0x00a3a83e处的首次机会异常 在dmc.exe中:0xC0000005:访问 违反写入位置0x00000000

中0x00a3a83e处未处理的异常 dmc.exe:0xC0000005:访问冲突 写入位置0x00000000

但在第二种情况下(在OnBnClickedButton1()内部),不会引发异常,OnBnClickedButton1()的执行将中止,程序将继续正常运行。在输出窗口中跟踪以下消息:

0x00a3c23f处的首次机会异常 在dmc.exe中:0xC0000005:访问 违反写入位置0x00000000

因此,在应用程序初始化之后,似乎出现了一些顶级异常处理程序。我已经创建了一个新的测试应用程序,并尝试了同样的方法——在这两种情况下都会抛出异常。我比较了它们的项目设置(在.vcproj文件上的差异),没有发现与此问题相关的差异

也许这种行为是由一些奇怪的MFC宏定义控制的?还是我无意中受到了其他设置的影响


抱歉,问题的第一个版本出现了错误。

哦,原来问题是由OpenGL
wglMakeCurrent()
调用引起的,只有在使用NVIDIA GeForce 8800图形卡的64位Windows 7下才会出现问题,同时在Windows Vista 32位下,所有问题都可以正常工作

我问了一个新问题。谢谢你的反馈