我在Visual Studio中创建了一个新的C ++ MFC MDI应用程序。
第一个问题-
在调试/发行版(仅x86)中启动它时会引发异常An invalid handle was specified
。
这是我的配置。 :
按“中断”:如果没有Microsoft Symbol Server,则表明C:\Windows\SysWOW64\ntdll.dll
中出现问题。对于Microsoft Symbol Server,它仅显示“源不可用”。
按“继续”一两次:启动应用程序,该应用程序可以正常使用。
通过单击对话框“ X”按钮退出应用程序时,ntdll.dll中还会引发Access violation reading location
。在(x86)和(x64)中抛出此异常。
我在另外三台运行Windows 10(旧版本)的PC上进行了测试,并且发生了相同的事情。我在运行Windows 7的2台PC上进行了测试,没有问题。
编辑- 在抛出这些异常之后,请查看以下两个用于调用堆栈的屏幕截图。
Callstack for Invalid Handle Exception when launching the app
Callstack for Access Violation Exception when exiting the app
第二个问题-初始化变量的值随机错误。
例如,我已经在基类构造函数中看到了这一点:
variable = 0; // int
调试器告诉我variable
的值为52685
。不确定这是否是巧合,但是VC ++ 2015 Redistributable Update 3的ID是52685(请参阅URL参数)。
Microsoft Visual C++ 2015 Redistributable Update 3 / id=52685
控制台中variable
的输出显示正确的值(0)。
我很乐意为您解决此问题提供帮助,因为它会使调试工作变得非常困难。我唯一确定的是它与Windows 10相关。
编辑- 调试时,请查看以下两个变量值的屏幕截图。在第一个中,您可以看到所有“ int”变量的值都为-842150451(应该改为0,对吧?)。这些变量在类的私有部分中声明。第二张屏幕截图显示了此类的默认构造函数。这些“ int”(image_bpp)之一显示值52685而不是分配的0。如果我切换image_bpp和image_pixel_color的初始化,则image_pixel_color显示错误的值。
看起来我不是第一个遇到此问题的人。我忘了提到我使用的是简单继承(实例化派生类,然后调用基类的构造函数,这是我放置断点的地方)。
请参阅此链接以供参考:Compiler bug with derived classes