【问题标题】:Debugging an exception, source information missing调试异常,源信息缺失
【发布时间】:2013-06-19 05:07:50
【问题描述】:

我的程序在崩溃之前似乎运行了很短的时间并出现以下错误:

Unhandled exception at 0x001FFF23 in Program.exe: 0xC0000005: 
Access violation reading location 0x040FA010.

调用堆栈非常无用(此模块的调试信息中缺少源信息),所以我不知道问题出在哪里。程序在崩溃之前正常运行了不同的时间(几百帧),因此使用断点定位问题非常困难。尝试加载符号,但未找到符号。

ntdll.dll!_NtRaiseException@12()   Unknown
ntdll.dll!_KiUserExceptionDispatcher@8()   Unknown
0027ff23()  Unknown
[Frames below may be incorrect and/or missing]  
nvoglv32.dll!582c9af4() Unknown
nvoglv32.dll!582c9dbb() Unknown
nvoglv32.dll!582cdbd3() Unknown
nvoglv32.dll!582d0918() Unknown
nvoglv32.dll!57a9491b() Unknown
nvoglv32.dll!580c5f35() Unknown
KernelBase.dll!_GlobalAlloc@8()    Unknown
nvoglv32.dll!57a058a5() Unknown
nvoglv32.dll!579f60ab() Unknown
nvoglv32.dll!582df7ce() Unknown
nvoglv32.dll!57a106e5() Unknown
nvoglv32.dll!58190f2d() Unknown
nvoglv32.dll!582bb8c7() Unknown
nvoglv32.dll!57a0b621() Unknown
nvoglv32.dll!5823285b() Unknown
nvoglv32.dll!58232a9d() Unknown
KernelBase.dll!_HeapCreate@12()    Unknown
ntdll.dll!_NtFreeVirtualMemory@16()    Unknown
KernelBase.dll!_GlobalFree@4() Unknown

查看调用堆栈,我认为它与 OpenGL 相关,但 glGetError() 从不表示有问题。我的程序很长,所以我没有在这里发布。此外,我的问题不仅仅是修复这个特定的异常,而是找到一种有效的方法来在未来调试它们。逐行阅读整个程序不是一个,因为我不知道问题发生在哪个函数中。 /W3 没有编译器警告,所以我不知道从哪里开始。如何在 Visual Studio 2012 Ultimate 中找出异常发生的确切位置?

【问题讨论】:

  • 您是否启用了Debug -> Exceptions... -> Win32 Exceptions -> Access violation 选项?

标签: c++ visual-c++ opengl visual-studio-2012


【解决方案1】:

此类 GL 崩溃的最可能原因是缓冲区处理不当。你不会用 glGetError() 看到这个表面——驱动程序在访问坏的顶点/索引缓冲区时会简单地崩溃。使用gDEBugger 调试它可能会很幸运

【讨论】:

    【解决方案2】:

    使用Microsoft Symbol Servers 下载Windows DLL 的符号。这有望让您更好地了解错误发生的位置。要在 Visual Studio 中使用符号服务器,请关注 these instructions

    【讨论】:

    • nvoglv32 是一些 nVidia 图形驱动程序的 openGL 模块,我怀疑你必须通过 nVidia 才能获得有用的调试信息。但是,快速的谷歌搜索并没有产生任何结果,很可能这些符号不是公开可用的(或者可能非常昂贵)。
    猜你喜欢
    • 2017-05-19
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    相关资源
    最近更新 更多