chromium浏览器开发系列第五篇:Debugging with WinDBG

Windbg相信windows开发的人都知道,有些人用的溜儿溜儿的,有个crash,直接拿这个工具一分析,就定位出来了。非常好用。以前有个同事,做sdk开发的,会各种命令。来北京后,还去过微软面试(不过当时是做外包,挣得也不少),问的问题就包括会不会用windbg定位问题。当时就会几个简单的命令,最后还是没面上(不堪回首)。

使用windbg调试windows下的程序,只要有符号文件,问题定位分分钟的事。下面主要讲一下使用windbg调试chromium。有些是从官网上对翻过来的,如果大家看不明白,可以直接加我们的公众号:程序员互动联盟(coder_online)来进行互动。

Windbg是一个强大的免费工具,它比起VisualStudio的调试器还要强大,能够看到当前的内存栈等信息,但是也比那个难用(和Linux下的gdb差不多)。大家可以去微软官网下载最新版本安装,官网有两个版本:32位和64位。我们使用32位来调试chromium。

初始化

1.设置符号路径

打开windbg,文件菜单->符号文件路径(快捷键ctrl+s)

这里假设c:\code\symbols这个是你符号文件存储的位置(这个可以自己随意设置,但是必须保证有足够的空间,找个空盘符有个10G左右的,新建一个文件夹,以后就别管了),设置符号路径如下:

SRV*c:\code\symbols*http://msdl.microsoft.com/download/symbols;SRV*c:\code\symbols*https://chromium-browser-symsrv.commondatastorage.googleapis.com

2.在视图窗口中可以选择显示一些窗口


3.使用文件下的一些功能去加载想要调试的进程或者可执行文件

4.设置源码路径

如果想直接定位到源码位置,可以设置源码路径:文件->源码路径,最好是本地代码,直接指定chromium网络地址不太现实:

使用windbg调试chromium比较重要的一点是,它可以调试子进程。一个比较简单的方法就是在使用“Open Executable”打开窗口时,选中下面的选项,如图所示:

也可以通过attach来调试运行的进程,使用detach来解除调试进程。


#重要说明

(1) windbg命令分为标准命令,元命令和扩展命令。

标准命令提供最基本的调试功能,不区分大小写。如:bp g  dt  dv  k等

元命令提供标准命令没有提供的功能,也内建在调试引擎中,以.开头。如.sympath  .reload等

扩展命令用于扩展某一方面的调试功能,实现在动态加载的扩展模块中,以!开头。如!analyze等

(2) 进入调试状态时,直接回车可重复执行上一条命令;按上下方向键可以浏览和选择以前输入过的命令

(3) 神奇的Tab键,进行命令补全;ESC清除当前命令输入框中的文本

(4) 使用;作为分隔符,可以在同一行输入多条命令

(5) 下图红色框中的“0:047”。【0为当前调试会话的进程号;047为调试会话的线程号】

(6) 当命令提示符显示*BUSY*时,即使命令输入框可以输入命令,但输入的命令不会立即被执行,要等windbg空闲时才能执行。

可使用Ctrl + Break来终止一个长时间未完成的命令。

如果大家想更深入了解windbg的知识,可以去官方网站学习。另外推荐一本学习的书籍《软件调试》。


如果大家有什么想法或者疑问,请关注我们的公众号,及时沟通,这里有各种大牛帮你解决问题。

欢迎关注微信公众平台:程序员互动联盟(coder_online),一个开发人员的家,来诉说自己的故事

欢迎加入我们的QQ群:程序员互动联盟(254241126)

时间: 2024-09-29 22:28:48

chromium浏览器开发系列第五篇:Debugging with WinDBG的相关文章

chromium浏览器开发系列第三篇:chromium源码目录结构

上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己.官网只能作为一个参考. Chromium结构相对两年前变化很大.目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器,webkit.浏览器是主要的进程,代表所有的UI和I / O.渲染通常是每个tab页的子过程,是由浏览器驱动.Webkit做布局和渲染. 简单介绍解决方案文件:

chromium浏览器开发系列第三篇:chromium源码目录说明

上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己.官网只能作为一个参考. Chromium结构相对两年前变化很大.目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器,webkit.浏览器是主要的进程,代表所有的UI和I / O.渲染通常是每个tab页的子过程,是由浏览器驱动.Webkit做布局和渲染. 简单介绍解决方案文件:

chromium浏览器开发系列第四篇:如何调试最新chromium源码

附上上几篇文章地址,方便大家查看: 下载源码 编译源码 目录结构 接二连三的事情,时间比较紧张,但是还是没有把这个系列的文章丢掉,因为这也是对自己知识的总结吧.提倡大家多写写,以后再看的时候会有种莫名的小激动. 上周写的是chromium的目录结构,好像大家不太感兴趣,在我看来这部分很重要.开头有链接地址,大家想看可以再看看. 从源码下载到编译,到目录结构,今天终于到了重要的环节,调试. 在windows上,调试工具都是使用微软自家的产品:Visual Studio或者winDBG(windeb

chromium浏览器开发系列第四篇:如何调试最新chromium

接二连三的事情,时间比较紧张,但是还是没有把这个系列的文章丢掉,因为这也是对自己知识的总结吧.提倡大家多写写,以后再看的时候会有种莫名的小激动. 上周写的是chromium的目录结构,好像大家不太感兴趣,在我看来这部分很重要.开头有链接地址,大家想看可以再看看. 从源码下载到编译,到目录结构,今天终于到了重要的环节,调试. 在windows上,调试工具都是使用微软自家的产品:Visual Studio或者winDBG(windebug).Chromium也是与时俱进,现在主要使用Visual S

chromium浏览器开发系列第二篇:如何编译最新chromium源码

说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1.找个靠谱的vpn(我试过了,网上说的不用vpn拿代码的都不靠谱): 2.获取depot_tools,解压,设置环境变量; 3.gclient获取python和git,svn,设置环境变量: 4.fetch–nohooks chromium –nosvn=true 获取源码: 5.gclientsyn

chromium浏览器开发系列第二篇:如何编译最新chromium

说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1.找个靠谱的vpn(我试过了,网上说的不用vpn拿代码的都不靠谱): 2.获取depot_tools,解压,设置环境变量; 3.gclient获取python和git,svn,设置环境变量: 4.fetch–nohooks chromium –nosvn=true 获取源码: 5.gclientsyn

前端工程师技能之photoshop巧用系列第五篇——雪碧图

显示目录 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇--雪碧图 定义 css雪碧图(sprite)是一种网页图片应用处理方式,它允许将一个页面涉及到的所有零星图片都包含到一张大图中.使用雪碧图的处理方式可以实现两个优点: [1]减少http请求次数 [2]减少图片大小,提升网页加载速度 (多张图片加载速度小于拼合成的图片的加载速度) 凡事都不完美,实现优点的同时也带来了缺点,即提

C#微信公众号开发系列教程五(接收事件推送与消息排重)

微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C#微信公众号开发系列教程四(接收普通消息) C#微信公众号开发系列教程五(接收事件推送与消息排重) 在上一篇的博文中讲到,微信的消息可以大体分为两种类型,一种是包括:文本,语音,图片等的普通消息,另一种就是本篇要将的事件类型.包括:关注/取消关注事件,扫描带参数二维码事件,上报地理位置事件,自定义菜

Force.com微信开发系列(五)自定义菜单进阶及语音识别

在上文里我们介绍了如何通过Force.com平台里为微信账号添加自定义菜单,本文里我们将进一步介绍如何查询菜单以及删除菜单的相关知识,最后会介绍微信平台如何进行语音识别的相关技术. 查询菜单 与创建菜单类似,查询菜单有自己的接口,其中ACESS_TOKEN需要通过前文介绍到的接口获取,通常2小时后会失效: https://api.weixin.qq.com/cgi-bin/menu/get?access_token=[ACCESS_TOKEN] 为此首先通过前文介绍到的获取Access_Toke