【发布时间】:2011-06-23 15:42:20
【问题描述】:
好的,我在 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 在执行过程中的行为变化。
解决方案! -
我被之前的内存损坏错误吓坏了,以至于我没有意识到我的着色器不在可执行文件的本地目录中。这反过来又生成了一个在调用 D3DX11CompileFromFile() 后未正确处理的空指针。
【问题讨论】:
-
获取依赖walker,确保它可以看到你需要的所有dll。
-
是的,请查看第 4 段。也没有添加新的库或 DLL。
-
我怀疑您的应用程序中需要 gpsvc.dll 或 ieshims.dll。如果您无法在可以从 IDE 运行它们的同一台机器上运行输出可执行文件,那么您的编译器和链接器命令行可能会有所了解。愿意在这里发布吗?
-
哦,很明显......你的机器上确实安装了 DirectX 运行时,对吗?
-
您能否找出您的应用程序在 IDE 外崩溃之前“执行”到什么时候?如果它在任何“你的”代码执行之前崩溃,那么它肯定与代码的加载方式和依赖的 dll 被带入内存有关。
标签: c++ visual-studio crash