C ++程序在App :: InitInstance()之前崩溃

时间:2014-09-30 21:43:55

标签: visual-c++-2005

Visual C ++ 2005 Professional 调试/ Win32的 Windows 7企业版64位

我在程序的入口点设置了一个断点。我的程序在到达该断点之前崩溃了。当发生未处理的异常(访问冲突读取位置0x00000000。)时,我单击Break,并设置当前指令指针所在的断点。重新启动调试会话,程序在新断点处停止。我向上滚动到当前函数的顶部__tmainCRTStartup(),并在函数的左大括号处设置断点。

我再次停止/重启调试器,这次停在__tmainCRTStartup()。到目前为止,所有的DLL都已加载,如果需要,则运行其加载功能。按[F5]运行到原始断点。 Next Statement指针指向对WinMain(...)的调用。

单步执行此语句会导致未处理的异常。单步进入语句就会引发我的声明:“返回AfxWinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow);”。再次进入反汇编窗口,我将看到下一个要运行的语句:“jmp AfxWinMain(563AFAh)”。

我可以单步执行汇编代码,但是在尝试取消引用其中一个寄存器中的指针之前,我无法弄清楚它正在尝试做什么,该寄存器的值为零(0)。

我读到另一篇关于C程序在到达main()之前崩溃的帖子。即使标记为“C”,许多响应者也提到了类的静态实例的构造函数可能是罪魁祸首。其他人提到DLL的加载和运行他们自己的启动代码可能会使程序崩溃,但DLL似乎都加载了,并且我有证据表明在程序到达__tmainCRTSetup()之前至少有一个DLL运行其启动代码。

任何人都可以帮我理解这个吗?知道它为什么这样做应该有助于我理解如何修复它。

谢谢!

0 个答案:

没有答案