WINDBG常用方法【纪念客户端测试】

浸没在windows客户端测试好几年了,虽然使用过,但是就差一篇总结文章。

前言:windbg大家都很熟悉,它是做windows系统客户端测试的QA人员很应该掌握的定位程序崩溃原因的工具,

网上也有很多资料,但是真正适合QA阅读和实用的资料不多,我把我认为最重要最应该掌握的结合以前的使用经验分享一下:

基础篇

1、  打开windbg,打开dmp文件,File——〉open crash dump(其实有更方便的方法,后面会说)

2、  设置符号下载路径和加载路径,File——〉symbol file path,输入srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols,中间这个路径可以随意设置,如果有其他符号路径,比如产品的模块PDB,加分号分隔即可。

符号是可以定位到具体函数,甚至具体错在哪一行代码的。在分析过程中只要dmp中牵涉到相关的微软模块的pdb都会被下载和加载。网上也有“集合版”的pdb,可以自行搜索,但是符号对应模块的版本不一定适合。

3、  弹出一个workspace的对话框,选什么都无所谓,yes、no都一样,不需要关注

4、  打开dump以后可以看到命令行窗口,如下图打开一个IE的dump文件:

5、  上图最下方的输入窗口就是用来输入调试命令的

6、  第一条命令: !analyze –v,回车,这条命令是万金油,可以自动分析大概是谁导致的崩溃,那么它执行后要关注什么内容?看下图

7、  上图应该怎么看?从下往上看!这里面就是崩溃时内存里面的模块的执行过程。注意看“Following XXX”,字面意思是接下来的段可以错了,程序在这里崩溃了的意思,因为是从下往上走的,所以“Following XXX”上方的内容就是崩溃后的东西,而“Following XXX”下方的内容就是导致崩溃的“原因”,越接近“Following XXX”的越代表有可能是导致崩溃的直接模块,但是这不一定。如果抓到的dmp时机太迟,会出现堆栈破坏的情景,那么“Following XXX”得到的内容可能就是错误的了,那么这个dmp意义就不大,当然QA可以不关注这个,要关注的是如何让自己抓dmp的时机更及时。

8、  第二条命令:kb,回车,这条命令是上面的补充,用来显示当前线程call stack(调用栈)的内容,它可以查看更详细的内存信息,更好的定位崩溃原因,比如上图内容看不到360相关的东西,是不是说这个崩溃和360没关系呢?不一定!看kb的内容

9、  记住从下往上看!上图可以看到是IE调用了safemon.dll的函数后才开始创建dmp的,是不是有理由怀疑这个崩溃和网盾有关了?提BUG吧!

10、  可惜我们只看到和网盾有关,但是具体是网盾什么函数、什么参数导致的都看不到,如何看?这时就看出符号文件的重要性了!

Ps:还有一个命令是~*kb ,它用来显示dump中所有线程的call stack, 一般用到它说明这个dump已经比较难看了,可以从命令结果中搜索KiUserExceptionDispatcher等关键字,一般可以认为存在KiUserExceptionDispatcher的线程就是导致崩溃的线程。

高级篇

1、  设置DMP类型文件关联用windbg打开

  a) cmd到windbg目录运行windbg –IA

2、  手动抓DMP的方法:

  a) 如果程序崩溃后没有DMP文件生成可采取下面方法转存DUM。

  b) 当程序崩溃还没有退出的时候,开启WINDEBUGGER程序,在FILE——执行attach to a process——选择崩溃的进程。

  c) 再执行.dump /ma C:\testdump.dmp(如果没有/ma,dump大小比较小)

3、自动抓DMP的方法:

  a) cmd到windbg目录运行 windbg -IS

  b) 进行导致崩溃的操作

  c) 即可抓到dmp,执行.dump /ma C:\testdump.dmp

4、  使用windbg调起进程调试

  a) 开启WINDEBUGGER程序,在FILE——执行Open Executable——选择要进行调试的进程文件

  b) 当进程没有自保护或者没有反调试时,在input框输入g,回车,即可打开进程,此时如果进程发生崩溃,会被立即捕捉到。这种方法拿到的dmp比第二种更好。

5、  设置Global Flags,自动attach进程。Global Flags(简称gflags),设置它之后,目标进程启动时会立即被attach,主要用于调试一些系统进程,或“有依赖的”进程,这些进程不能直接由方法4打开,只能由其他进程调用,而调用用立即崩溃,所以也不能用方法2。这个方法同时可以设置很多检查项。

本文摘自:http://www.cnblogs.com/idbeta/p/4992128.html

原文地址:https://www.cnblogs.com/skyer/p/8602480.html

时间: 2024-10-01 05:12:12

WINDBG常用方法【纪念客户端测试】的相关文章

Lync 2010 标准版之Lync客户端测试(六)

我们新建2个虚拟机,来模块两个客户端用户,来测试我们lync之间对话. 1 首先在域中建2个测试用户, 2 分别用这两个用户登陆 3 如果2个虚拟机在域里,则直接登陆,如果2个虚拟机是非域环境,必须导入根证书,然后就可以登陆了 登录所需的时间很短,但具体还是取决于我们的机器性能,包括客户端虚机和服务端虚机,可能第一次登录时间会稍微长一点,这也是因为我们使用了自动配 置,也就是Lync客户端会自动的在域中查找Lync服务器,当然这一切是基于SRV记录来实现的,如果我们的SRV记录出错,我们则会看到

简单设置openvpn服务器,win xp客户端centos客户端测试;

拓扑图: 通过vpn实现远程客户端访问服务器内网: 服务器 IP 备注 centos6.6 (openvpn-server) 192.168.10.64  centos6.6 (client) 192.168.10.66 windows xp (client) 192.168.10.69 一.openvpn服务器配置 [[email protected]~]# vim /etc/sysctl.conf net.ipv4.ip_forward= 1    # 把0改成1,开启服务器端路由转发功能

淘宝分布式 key/value 存储引擎Tair安装部署过程及Java客户端测试一例

目录 1. 简介 2. 安装步骤及问题小记 3. 部署配置 4. Java客户端测试 5. 参考资料 声明 1. 下面的安装部署基于Linux系统环境:centos 6(64位),其它Linux版本可能有所差异. 2. 网上有人说tair安装失败可能是因为gcc版本问题,高版本的gcc可能不支持某些特性导致安装失败,经过实验证明,该说法是错误的,tair安装失败有各种可能的原因但绝对与gcc版本无关,比如我的gcc开始版本为4.4.7,后来tair安装失败,我重新编译低版本的gcc(gcc4.1

DNS客户端测试工具详解

由于DNS是用户接入互联网必须设置的,这里就以CentOS系统为例介绍DNS客户端的设置. 一.相关配置文件 我们知道,从主机名到IP的映射有两种方法,一种是把主机名和其对应的IP地址记录在hosts文件中,这是早期的方法.第二种方法是通过DNS服务器经过层级解析实现主机名到对应的IP地址的映射.这两种方法至今仍在系统上被采用,那么当用户需要解析主机名时,是先查找hosts文件而后再通过DNS架构解析呢?还是先进行DNS解析?它们的优先级如何?我们先看看相关的配置文件吧. /etc/hosts:

无线 iphone客户端测试白皮书(三)

7 . PUSH 测试 1) 检查 push 消息是否按照指定的业务规则发送 2) 检查不接受推送消息时,检查用户不会再接收到 push. 3) 如果用户设置了免打扰的时间段,检查在免打扰时间段内,用户接收不到 PUSH.在非免打扰时间段,用户能正常收到 push. 4) 当 push 消息是针对登录用户的时候,需要检查收到的 push 与用户身份是否相符,没有错误地将其它人的消息推送过来.一般情况下,只对手机上最后一个登录用户进行消息推送. 5) 测试 push 时,需要采用真机进行测试. 8

2008 R2部署SVN及WIN7客户端测试

一.从官网(https://www.visualsvn.com/server/download/) 下载服务端安装包 从(https://tortoisesvn.net/downloads.html) 下载客户端安装包,和对应的语言包 二.打开服务端按步骤安装 三.新建用户.组.库,并设置相应的权限 四.WIN7客户端测试OK! 原文地址:http://blog.51cto.com/jschinamobile/2067164

docker安装fastdfs与java客户端测试

一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=tracker -v /home/fastdfs_docker/fdfs/tracker:/data/fast_data --privileged=true --net=host morunchang/fastdfs sh tracker.sh 3.创建并启动storage容器.此处只做单机版测试 注意:由于

客户端测试

客户端测试 功能测试: prd 交互:页面设计:页面切换:滚屏.返回.点击等 视觉:动画加载:大图片等 安装: 包大小:预置文件完整性 权限申请:安装时:启动时:使用时 覆盖安装和升级:强升级.提示升级:中断下载包再继续等:卸载重新安装:升级后用户相关配置和信息是否可用等 卸载:保留本地文件:敏感信息移除 启动: 首次:正常启动:启动中结束进程:同意部分权限 退出后重启:结束进程重启:清缓存后启动 异常后恢复 系统相关: 网络:权限关闭-提示:无网或弱网 中断:来电.短信.通知 系统设置:系统语

Exchange 2016集成ADRMS系列-12:域内outlook 2010客户端测试

接下来,我们来到域内安装了office 2010的机器上进行测试. 首先我们在客户端上强制刷新组策略,把我们刚才设置的策略刷新下来. 然后我们可以运行gpresult /h result.html来看看策略是不是已经下来了. 策略下来之后,我们打开客户端上面的outlook 2010,然后查看一下,可以看到默认已经可以使用RMS的权限模板了.