好吧,我在 MSDN 论坛上提出了这个问题,但尚未收到任何回复,所以我想我应该尝试一下 StackOverflow。
我目前正在Win7上使用VS2008开发DirectX应用程序。我最近经历了一个令人讨厌的内存损坏错误,内存分配类抓取了字节对齐的内存。在此错误期间,我仍然可以运行调试和发布可执行文件,但是由于指令损坏或其他原因,它会崩溃,但它仍然会执行一段时间,直到崩溃。
然后我删除了整个内存分配类。该应用程序在 IDE 中完美运行(发布和调试版本),但我根本无法运行任何可执行文件。他们立即因无响应/停止工作错误而崩溃。我不认为这是我的环境的问题,因为我在另一台之前没有问题的计算机上遇到了同样的问题。
Dependency walker 给出“警告:至少未找到一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出函数,至少有一个模块具有未解析的导入。” 错误并表明找不到 GPSVC.dll 和 IESHIMS.DLL。我读到这可能会产生误导,只是表明某个地方存在潜在问题。并且 Dependency walker 前一天没有给我这个错误。
我没有修改任何配置或项目设置或添加新代码。知道什么可能导致这种行为吗?
另请注意,我在同一天安装了 Windows 7.1 sdk。认为这可能是某种与编译器相关的错误?
以防万一 MSDN 帖子上弹出一些有用的信息,这里是链接 http://social.msdn.microsoft.com/Forums/en-IE/vsdebug/thread/f692b394-8af2-4453-991c-aa6a443a9019
谢谢!
编辑 -
这是 Dependency Walker 分析输出的最后几行
GetProcAddress(0x76CD0000 [c:\windows\syswow64\KERNEL32.DLL], "DecodePointer") 从地址 0x6D8BAE4F 处的“c:\windows\syswow64\NVWGF2UM.DLL”调用并返回 0x77B59D65。GetProcAddress(0x76CD0000 [c:\windows\syswow64\KERNEL32.DLL], "DecodePointer") 从地址 0x6D8BAE4F 处的“c:\windows\syswow64\NVWGF2UM.DLL”调用并返回 0x77B59D65。GetProcAddress(0x76CD0000 [c:\windows\syswow64\KERNEL32.DLL], "EncodePointer") 从地址 0x6D8BAF60 处的“c:\windows\syswow64\NVWGF2UM.DLL”调用并返回 0x77B60FDB。GetProcAddress(0x76CD0000 [c:\windows\syswow64\KERNEL32.DLL], "DecodePointer") 从地址 0x6D8BAF70 处的“c:\windows\syswow64\NVWGF2UM.DLL”调用并返回 0x77B59D65。第二次机会异常 0xC0000005(访问冲突)发生在地址 0x0110152E 处的“c:\users\joel\desktop\DXAPP.EXE”中。退出“c:\users\joel\desktop\DXAPP.EXE”(进程 0x27D8),代码为 255 (0xFF)。
这是指 DLL 抓取空指针还是我的实际指令?我将快速阅读有关如何使用 WinDbg 的信息,如果这不能立即解决该问题,我将发布它的输出。
编辑2-
只需运行应用程序并点击“调试”即可启动 Visual Studio,我就能始终如一地到达编译着色器的位置。我目前假设问题的根源在于此。但是,我仍然不明白使用 IDE 和不使用 IDE 之间执行期间行为的变化。
解决方案!-
我对之前的内存损坏错误感到非常困惑,以至于我没有意识到我的着色器不在可执行文件的本地目录中。这反过来会生成一个空指针,在调用 …