晚上电脑玩游戏崩溃溃了N次,ntdll.dll出错,vc2008出错,显卡驱动出错,游戏自身出错……有时

随笔 - 43, 文章 - 0, 评论 - 10, 引用 - 0
&&&& 在使用ODE物理引擎和Direct3d做了一个程序后发现经常出现在调试程序时用Ctrl+F5运行出错,而用F5调试运行没有问题的情况,定位错误实在是难找,很简单的程序,不知道,到底是哪里出了问题,导致的程序崩溃。
&&& 崩溃时的出错信息:
&&&&这时,点对话框上的调试,虽然能进入到VC的调试器中,但仍显示程序正在运行,无法定位错误。
后来将物理引擎的初始化放在其它所有的初始化后面,这个问题就没有了,现在还不知道是什么原因。
所以,我想还得找找ntdll.dll的符号表,要不,再出这个问题也没法在VC2008下调试啊。
下面这篇文章是转来的:
使用microsoft symbol server 获取调试符号文件(转)
&&&&& 在VS中调试程序的时候,不可避免会遇到系统DLL文件的调用,比如Ntdll.dll、kernel32.dll等,但是这些系统文件在本地是没有调试信息的,所以在call stack window中经常会看类似 ntdll.dll!7c92e01b()的条目,我们知道这是一个函数,但看不出函数的名称。只能看出这个函数所在的DLL文件的名称,以及该函数在dll文件中的位置,此时可以设置VS的选项Load DLL Exports,从而可以获得DLL文件导出的文件的名称。ntdll.dll!7c92e01b()将被显示为ntdll.dll!NtQueryInformationProcess(),我们得到了函数名称。但是这只能到DLL文件的导出函数一级,对于DLL中的非导出函数VS仍然不能获得函数名,因为DLL导出表中没有DLL内部函数的调试信息。关于Load DLL Exports的说明参考附录A。
Microsoft提供了Symbol Server用于解决这类的问题,在该服务器上提供了Windows和.Net等各类Microsoft的产品的Symbol,也就是pdb文件,有了这些文件,我们就能很容易地定位code了,也能看到系统dll文件内部的函数的名称了。
在《How to use a symbol server with the Visual Studio .NET debugger》
和《使用 Microsoft Symbol Server 获取调试符号文件》这两篇文章中介绍了symbol server的使用方法。
总结一下:
1. Microsoft使用了 Symbol Server 技术。Microsoft Symbol Server 是使用 Debugging Tools for Windows 软件包附带的 SymSrv 技术 (SymSrv.dll) 构建的。SymSrv 会生成本地符号高速缓存,以进行快速、自动的符号解析。在支持该技术的IDE的执行目录下可以找到SymSrv.dll文件,比如在C:\Program Files\Microsoft Visual Studio 8\Common7\IDE目录下就存在SymSrv.dll文件。如果启用了Symbol Server 技术。则在调试的过程中SymSrv将会根据当前加载的DLL自动从微软的服务器上下载对应的Symbol文件,并保存到本地指定的目录中,以备调试使用。
2. 在IDE中启用Symbol Server技术。启用的过程就是指定Symbol文件路径的过程。在VS.NET2003中有三种设置的方法:
(1)、通过在系统中添加_NT_SYMBOL_PATH环境变量的方式设置Symbol全局可用。
如果在 _NT_SYMBOL_PATH 环境变量中提供了正确的 symsrv 语法,常见的 Microsoft 调试工具就会使用 SymSrv 技术。这些工具会自动包括您在该变量中提供为符号路径的任何内容。例如:
Set _NT_SYMBOL_PATH = symsrv*symsrv.dll*f:\localsymbols*/download/symbols
(2)、只供某个解决方案使用。在解决方案的属性?&Common Properties&?&Debug Symbol Files&中添加一个新的Symbol File的路径,比如:symsrv*symsrv.dll*f:\localsymbols*/download/symbols。
(3)只供某个工程使用。在工程的属性页?&Debugging&?&Symbol Path&一栏中添加Symbol File文件的路径,比如symsrv*symsrv.dll*f:\localsymbols*/download/symbols。
在VS2005中的设置方法不同:在2005中是通过&工具&?&选项&?&调试&?&符号&来设置Symbol File的路径的。参考附录B。
3. 启动Symbol Server之后,第一次调试的时候,IDE将要从Server上下载调试信息,所以第一次调试的时候速度将会比较慢。为此微软提供了一个工具SymChk.exe用于下载Symbol文件到本地机器。SymChk.exe的使用方法参考附录D。
附录A:MSDN中关于Load DLL Exports的说明
若要访问&本机&页,请单击&工具&菜单并选择&选项&。在&选项&对话框中,展开&调试&节点并选择&本机&。该页允许为调试本机应用程序设置下列选项。
加载 DLL 导出
选定后,加载 DLL 导出表。处理 Windows 98 系统 DLL、Windows 消息、Windows 过程 (WindowProc)、COM 对象、封送或任何您不具有其符号的 DLL 时,DLL 导出表中的符号信息很有用。读取 DLL 导出信息需要一些开销,因此该功能默认情况下是关闭的。
若要查看 DLL 导出表中的可用符号,请使用 dumpbin /exports。符号可用于任何 32 位系统 DLL。通过阅读 dumpbin /exports 输出,可以查看到精确的函数名,包括非字母数字字符。这对于在函数上设置断点很有用。DLL 导出表中的函数名在调试器的其他位置可能似乎被截断了。调用将按调用顺序列出,当前函数(嵌套最深的函数)位于顶部。有关更多信息,请参见 dumpbin /exports。
附录B:VS2005 MSDN中《如何:指定一个符号路径》
为调试代码,调试器需要包含应用程序的符号的 PDB 文件(或旧格式的 DBG 文件)。默认情况下,调试器在与 EXE 或应用程序相同的位置查找这些文件。
如果需要调试系统或第三方 DLL,则还必须通知调试器这些 DLL 的 PDB 或 DBG 文件的所在位置,所以必须指定这些 DBG 或 PDB 文件的所在路径以便调试器可以找到它们。
向符号文件(.pdb 或 .dbg)位置列表添加路径名
1. 从&工具&菜单中选择&选项&。
2. 在&选项&对话框中,单击&调试&节点将其打开。
3. 在&调试&下,选择&符号&类别。
4. 在&符号&页上有一个显示&符号文件 (.pdb) 位置&的框。该框上方有四个图标。单击文件夹图标,可编辑文本即出现在&符号文件 (.pdb) 位置&框中。
5. 编辑文本以添加新的路径名。语句完成功能有助于获得正确的格式。
6. 确保&只在手动加载符号时搜索上述位置&未被选中,除非在调试时要手动加载符号。
7. 如果要使用远程符号服务器上的符号,通过指定一个可将符号复制到其中的本地目录,您将能够提高性能。为此,请使用&将符号从符号服务器缓存到此目录&框。注意,如果正在调试远程计算机上的程序,则缓存目录是指远程计算机上的目录。
8. 单击&确定&。
附录C:VS2005 MSDN中《如何:使用符号服务器》
可以使用符号服务器以允许 Visual Studio 自动下载用于调试 Visual Studio 项目的正确符号。
Microsoft 为开发人员维护了一台公共符号服务器,地址是 。此服务器仅用于符号下载。它是不可浏览的。此服务器为各种操作系统(如 Windows NT 4.0、Windows 2000、Windows XP 和 Windows Server 2003)以及 MDAC、IIS、ISA 和 .NET Framework 提供符号。
另外,您也可以将本地符号服务器安装在 Intranet 上或本地计算机上。
若要使用符号服务器,请按照下面的过程的描述,在 Visual Studio 选项中指定服务器的路径。
可以从&选项&对话框中的&符号文件 (.pdb) 位置&列表中移除路径。
设置符号服务器的路径
1. 在&调试&菜单上,单击&选项&。
2. 在&选项&对话框中打开&调试&节点,然后单击&符号&。
3. 编辑文本以添加符号服务器的新路径。
若要使用 Microsoft 公共符号服务器,请输入:
若要使用 Intranet 符号服务器,请输入:
若要使用本地计算机上的符号服务器,请输入:c:\path\symbols
4. 确保&只在手动加载符号时搜索上述位置&未被选中,除非在调试时要手动加载符号。
5. 如果使用远程符号服务器上的符号,通过指定符号能够复制到的本地目录可以提高性能。若要执行此操作,请在&将来自符号服务器的符号缓存至此目录&框中输入一个路径。若要连接至 Microsoft 公共符号服务器,您需要启用此设置。注意,如果在远程计算机上调试程序,缓存目录指的是远程计算机上的目录。
6. 单击&确定&。
7. 如果使用的是 Microsoft 公共符号服务器,则会出现&最终用户许可协议&对话框。单击&是&可接受该协议并将符号下载至本地缓存。
附录D:使用 SymChk.exe 实用工具下载符号
您可以使用 SymChk.exe 实用工具,验证符号并以便捷、非侵入的方式生成本地符号高速缓存。SymChk.exe 实用程序随 Debugging Tools for Windows 软件包提供。SymChk.exe 是一种命令行工具。您可能需要将 Debugging Tools for Windows 软件包的文件夹添加到系统上的 PATH 环境变量,以便从任意命令提示符下访问该工具。
要使用 SymChk.exe 实用程序下载 Windows\System32 文件夹中所有组件的符号文件,请使用以下命令行命令:
symchk /r c:\windows\system32 /s SRV*c:\symbols\*/download/symbols
在此示例中:
& &/r c:\windows\system32&查找 System32 文件夹和所有子文件夹中的所有符号文件。
& &/s SRV*c:*/download/symbols&指定用于符号解析的符号路径。在此例中,&c:\symbols&是将在其中从符号服务器复制符号的本地文件夹。
要获取 SymChk.exe 命令行选项的更多信息,请在命令提示符下键入 symchk /?。其他选项包括指定正在运行的可执行文件的名称或进程 ID (PID) 的功能。最近玩游戏电脑老是出错_百度知道运行游戏总跳出,win7的ntdll文件出错,如何修复_百度知道急救!!!错误模块 ntdll.dll
[问题点数:40分]
急救!!!错误模块 ntdll.dll
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
2009年7月 总版技术专家分月排行榜第二2009年3月 总版技术专家分月排行榜第二2009年1月 总版技术专家分月排行榜第二2005年7月 总版技术专家分月排行榜第二2005年5月 总版技术专家分月排行榜第二2005年3月 总版技术专家分月排行榜第二
优秀小版主2015年8月优秀小版主2015年9月优秀小版主2015年5月优秀小版主2015年2月论坛优秀版主
本帖子已过去太久远了,不再提供回复功能。0XC0000005:Access violation解决思路 - VC/MFC当前位置:& &&&ntdll.dll
0XC0000005:Access violation解决思路ntdll.dll
0XC0000005:Access violation解决思路&&网友分享于:&&浏览:12次ntdll.dll
0XC0000005:Access violation在dialog的oninitdialog函数出错,调用完return&true出错。我调试debug下出现错误,release的时候没有错误。
有人知道是怎么回事吗?
PS:我没有办法定位(没有找到提示信息),因为是讨厌的vc6.0的环境。别说转移到vs2008之类的环境下,试过了,比这个问题还多。谢谢------解决方案--------------------堆栈溢出。release正常不代表程序没有错误。仔细检查有没有循环和递归调用的地方看有错误没。------解决方案--------------------你Debug下调试一下,打开call&stack看看能不能定位出错的函数先。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 电脑玩游戏崩溃 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信