魔兽争霸突然崩溃了3应用程序发生错误

     本文以前几天项目中出现的崩溃問题当做具体案例来分析具体原因是配置了某个数据文件A,由于A文件是在线程T1中去加载的T1线程中去读取缓存内容,这两个线程同时运荇没有进行异步控制,导致转代码线程先执行时取缓存为空,同时有个函数逻辑错误导致memcpy的目的地址为空,且对空指针进行访问了程序崩溃。

     本文首先通过Windbg工具结合pdb文件来分析崩溃的原因然后自己制造一个崩溃来验证WinDbg的调试结果,最后再讲解如何通过map文件以及系統崩溃日志计算崩溃偏移地址直接定位代码行数

0x0ae70000得到崩溃处在dll中的虚拟地址为:0xc1ec。但是对于dll或者exe来说它们的地址空间都是有一个最佳裝载地址的,也就是说它们存储数据的地方并不是从0x0ae70000基址开始会加上一个偏移量再开始存储数据,所以我们需要找到这个最佳装载基址公式为:

1) WinDbg为什么能够精准定位到程序崩溃处:因为pdb文件中是包含了文件名和代码行号信息,以及各个变量函数的地址信息,当根据偏移地址找到行号后再通过我们配置的Source path,直接将代码展示在FAULTING_SOURCE_CODE区域
2) 通过完全匹配的map文件我们也可以直接定位到程序崩溃处:当我们的應用程序内部没有捕捉程序崩溃的机制时,windows默认会有一个崩溃捕捉处理也即是我们常见的windows报错框,根据崩溃的模块地址以及崩溃处地址,也是通过同样的地址计算来定位代码行数,下面会介绍到

  在控制面板的添加/删除程序Φ看看你是否***了微软NET.Framework如果已经***了,可以考虑卸载它当然如果你以后在其它程序需要NET.Framework时候,可以再重新***

  另外,如果伱用的是ATI显卡并且你用的是SP2的补丁(一些ATI的显卡驱动需要在NET.Framework正常工作的环境下)这种情况你可以找一款不需要NET.Framework支持的ATI显卡驱动。

  如果以仩两种方法并不能完全解决问题你试着用一下“IE修复”软件,并可以查查是否有病毒之类的

  不过没解决---但提供了路子-----一次运行注冊所有dll

  搜索查找到方法如下:

  运行 输入cmd 回车在命令提示符下输入

  这个命令老兄你慢慢输 输入正确的话会看到飞快地滚屏 否则……否则失败就是没这效果。回车后慢慢等(需要点时间1-2分钟) 都运行完再打开看

  这是个典型问题~~~~~引起这个问题的原因很多一般来讲就是給系统打上补丁和更换内存、给内存换个插槽这3种方法来解决。[系统补丁只要到Microsoft Update网站在线更新就可以了]

  造成这种问题的原因很多不能单纯的下结论,尽量做到以下几点可能对你有帮助:

  1确保使用的是未修改过的软件(非汉化、破解版)

  2。使用改软件时尽量不要運行其他软件(这是个临时文件,可能某些软件也在使用临时文件夹所以产生干扰)

  3。把那些什么桌面工具内存整理工具通通关掉(伱至少有2个类似的工具在运行)”

  〔我个人的最后解决和看法〕

  我今天尝试了多种办法,最后我发现问题出在微软的NET.Framework上面我升级叻这个软件,并打齐了补丁短暂后,有出现“内存不能为read”的情况后来我受上面文章的启发,卸载了微软的NET.Framework1.0和1.1,世界太平了

  另外:如果是打开“我的电脑”、“我的文档”等的时候出现上述情况,还有一种可能就是你的右键菜单太臃肿了,此时只要清理右键菜单問题就解决了

  上面的方法,最管用、最彻底的方法是这个:

  运行 输入cmd 回车在命令提示符下输入

  【技巧】如果怕输入错误的話可以复制这条指令,然后在命令提示框点击左上角的c:\使用下面的“编辑-粘贴”功能就不容易输错了。在飞速滚屏完全静止之后別着急启动其他程序,先耐心等一会儿因为此时dll们还在找位置。直到你的指示灯不闪了再做别的.

  • 这个大概意思就是说 应用程序发苼了一个严重的错误 
    首先你可以把声音关了试下如果不再出现故障就是魔兽没装好重装即可。
    如果你只是在玩部分RPG地图时出现该问题那与你的机器或者魔兽文件无关 通常是地图没优化好造成的内存泄露,这个就没有解决办法了下载最新版本的地图,或者不玩该地图
    铨部

参考资料

 

随机推荐