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

摘要:
上周写的是chromium的目录结构,好像大家不太感兴趣,在我看来这部分很重要。Chromium也是与时俱进,现在主要使用VisualStudio2013。chromium是多进程架构,我们启动后只能调试主进程,其他的renderer进程和插件扩展进程是单独的,不能被直接调试。下面提供几种方法可以调试其他进程:1.单进程模式最简单的方法是将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_toolspython276_bin;C:depot_tools;

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

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

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

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

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

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

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

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

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

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

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

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

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

1.单进程模式

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

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

2.启动chrome的调试log

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

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

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

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

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

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

如果大家有什么疑问或者有什么问题想要和我探讨,希望大家关注微信公众平台:程序员互动联盟(coder_online)

这里有你想要的。

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

免责声明:文章转载自《chromium浏览器开发系列第四篇:如何调试最新chromium源码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇三维重建论文笔记 DeMoN:Depth and Motion Network for Learning Monocular Stereounity预制体与非预制体的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Google 浏览器 离线包下载方式

最近因工作需要,需要安装google浏览器,并且安装在系统固定目录,用360软件管理下载后发现默认安装在C:UsersadministratorAppDataLocalGoogleChromeApplication下, 如果在域环境下,切换用户后需要找到这个目录,或者重新安装,因此想下载个离线包进行安装,打开https://www.google.cn/ch...

Windbg学习18(sx和ld)

1.sx sx*命令用来控制被调试的程序发生某个异常或特定事件时,调试器要采取的动作 sx 命令显示当前进程的异常列表和所有非异常的事件列表,并且显示调试器遇到每个异常和事件时的行为。 sxr 命令将所有异常和事件过滤器的状态重设为默认值。命令被清除、中断和继续选项被重设为默认值,等等。 sx这个命令的输出信息可以分为三个部分: 第一部分是事件处理与相应处...

selenium加载配置文件

使用python+selenium启动各大浏览器时,和手动打开浏览器并不一样,不会自动启动插件,因此需要加载用户自己的配置文件,加载方法如下: chrome: from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--user-dat...

VS调试技巧

下面有从浅入深的6个问题,您可以尝试回答一下 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢? 你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次...

深入探究Lua的GC算法(下)-《Lua设计与实现》

紧接着上一篇文章zblade:深入探究Lua的GC算法(上)-《Lua设计与实现》 这篇文章让我们收尾GC的具体后续操作。转载请标明出处:http://www.cnblogs.com/zblade/ 3、GC的扫描阶段 GCSpropagate 只要处于这个阶段,就会分2种情况执行,一个是propagatemark,一个是atomic,让我们分别看...

Tomcat8源码编译及导入Eclipse中研究

最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改。 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便。 1. Tomcat8源码编译步骤 1.1 先到Apache Tomcat 8.0官网下载最新版Source Code Distributions,解压到某个目录下,如D:apache-t...