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

接二连三的事情,时间比较紧张,但是还是没有把这个系列的文章丢掉,因为这也是对自己知识的总结吧。提倡大家多写写,以后再看的时候会有种莫名的小激动。

上周写的是chromium的目录结构,好像大家不太感兴趣,在我看来这部分很重要。开头有链接地址,大家想看可以再看看。

从源码下载到编译,到目录结构,今天终于到了重要的环节,调试。

在windows上,调试工具都是使用微软自家的产品:Visual Studio或者winDBG(windebug)。Chromium也是与时俱进,现在主要使用Visual Studio2013。我今天主要讲使用vs2013调试源码。

我在编译代码那一章(http://my.oschina.net/ghost045/blog/395973)的时候曾经讲过生成源码工程的东东,如下:

set GYP_MSVS_VERSION=2013

set GYP_GENERATORS=msvs-ninja,ninja

set GYP_DEFINES=component=shared_library

set PATH=C:\depot_tools\python276_bin\;C:\depot_tools\;

python.exe src/build/gyp_chromiumsrc/chrome/chrome.gyp >>log.txt 2>&1

运行成功后,打开src\chrome文件夹,发现下面多了好多文件----都是工程文件。

如果你已经安装了vs2013,那么直接双击打开chrome.sln即可。打开后在解决方案资源管理器可以看到所有的解决方案信息。

点击展开上图中的chrome文件夹,选择chrome解决方案,右键设置为启动项目,然后直接F5(调试->开始调试)就可以启动程序调试了。

如果想以其他的解决方案为启动项目,可以直接右键设置就行。不过需要增加下面一步设置:右键打开想要设置的启动项目的属性

点击左边的调试选项,设置“命令”,直接将文件地址设置为chrome.exe的绝对路径地址

这样就可以直接选择从不同的解决方案启动调试了。

chromium是多进程架构,我们启动后只能调试主进程,其他的renderer进程和插件扩展进程是单独的,不能被直接调试。下面提供几种方法可以调试其他进程:

1.单进程模式

最简单的方法是将chromium运行在单进程模式。这样你会看到整个程序的状态,没有额外的工作(虽然它仍会有很多的线程)。使用单进程模式,需要在在Chrome项目属性调试页中的命令行参数添加--single-process。这种方法并不完美,因为有些问题不会出现在这个模式。

默认情况下,Visual Studio选择Browser/browser.exe为启动项目,需要用户手动选择chrome解决方案右键设置为启动项目。

2.启动chrome的调试log

在命令行参数添加--enable-logging --v=1,运行期间的log将会保存在文件中,debug版本的放在out\Debug下的chrome_debug.log中,release版本的放在C:\Users\账户名\AppData\Local\Chromium\User Data目录中。

3.使用vs2013自带的“附加到进程”选项调试

直接在vs2013中调试时,可以使用附加到进程的功能,直接开启调试后,点击Tools > Attach to Process,附加你需要调试的进程即可。

如果你想调试的renderer进程的内容发生在进程启动时,那么可以在命令行参数增加--renderer-startup-dialog--no-sandbox,这两个必须同时使用,才能在renderer进程启动时弹出窗口让你及时附加到进程上。

另外还有很多有用的参数可以设置,使用这些参数可以让你随心所欲的实现自己想要调试的内容,chromium团队也在一直努力让调试变得更简单实用。其他的命令可以查看文件:content_switches.cc,里面标识了各种参数以及含义。

调试的东西很多,今天就先讲这么多,讲多了也难以消化,之后我还会给大家带来更细致的讲解,包括windebug调试。

如果大家对本系列文章有疑问,可以在公众号留言,小编第一时间联系作者帮你耐心解答。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据杂谈

想学Python?做好第一步:环境配置

鉴于越来越多的人想要学习python,但是,有很多人在安装python第三方库的时候,陷入了无止境的痛苦之中,为什么呢?因为遇到了各种坑。 ——安装报错,报错了...

1917
来自专栏Python中文社区

一篇文章完全理解virtualenv

專 欄 ❈ 夏轩,Python中文社区专栏作者。 博客:http://blog.csdn.net/u012734441 ❈ 1.virtualenv介绍 2...

2026
来自专栏Android开发指南

1.第三方登陆

3019
来自专栏PHP技术

HTTP/2 服务器推送(Server Push)

HTTP/2 协议的主要目的是提高网页性能。 头信息(header)原来是直接传输文本,现在是压缩后传输。原来是同一个 TCP 连接里面,上一个回应(respo...

3236
来自专栏小尘哥的专栏

springboot2.x中的服务监控之邮件预警

以下以QQ邮箱为例(163等邮箱都大差不差) 登录后进入“邮箱设置”-->“帐户”--》往下拉--》开启POP3/SMTP

762
来自专栏SDNLAB

OpenDaylight与Mininet应用实战之OpenFlow协议分析

1 实验目的 在实验平台上熟悉SDN原理操作,通过wireshark抓包工具可以直接看到控制器与OVS交换机的通信过程、分析OpenFlow(以下简写为OF)协...

33610
来自专栏小巫技术博客

Android多模块构建合并aar解决方案

1823
来自专栏分享达人秀

开发IDE大升级,终于迎来了Android Studio

通过前面几期的学习,我们知道了Android的前世今生,也了解了Android的系统架构和应用组件,也连续用了几期来学习Android开发环境的搭建,不...

21510
来自专栏大数据人工智能

小白请点进来!零基础搭建Hadoop大数据处理环境

由于hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7,具体...

48810
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 项目展示地址,点这里...

2696

扫码关注云+社区