文档章节

如何简单快速调试高大上的谷歌浏览器

lonely1986
 lonely1986
发布于 2015/04/11 00:27
字数 561
阅读 37
收藏 0

上一篇我们简单的将了在Ubuntu上编译chromium,android content_shell_apk的编译,一切顺利的就能生成apk。但是我们仅仅只是照搬了人家google开源的东西,作为一个开发者我们应带着探索的精神,都说它稳定,速度快。它为什么这么快、稳定? 带着这一系列的问题,我们去学习理解它,去搞明白它的原理、架构。

所以...... 

一切精妙的东西最终又归结到源码上,直到我们了解它熟悉它。怎么快速的的了解熟悉它呢?不外乎2点

1、大量的代码阅读

2、跟踪调试代码

今天我们就简单的学习一下在Ubuntu下简单调试chromium代码

首先我们必须弄个Debug调试版本在Ubuntu上运行调试。

编译步骤:

1、build/install-build-deps.sh

2、build/gyp_chromium-Dflag1=value1-Dflag2=value2

3、export GYP_DEFINES="flag1=value1 flag2=value2"

4、ninja-v-Cout/Debug chrome

编译成功后会在src/out/Debug 下生成300个左右文件其中有chrome可执行程序和库。

调试:

调试多进程最简单的方法是用 attach pid 

shell下:gdb src/out/Debug/chrome 启动到gdb输入后用 r -no-sandbox (沙箱模式无法运行,有待研究)

ps -ax 查看进程id


或者用pstree -p|grep chrome


再新打开的shell输入sudo gdb (有权限限制必须用root权限)

gdb启动后输入attach pid 然后加上你要调试的断点

我们调试RenderImage.cpp  layout 函数在绘制进程中调用堆栈

有了函数调用堆栈顺序,你有不理解不清楚的地方加个断点,查看堆栈一切都这么简单。

Debug调试只能起到辅助作用,学习还是需要我们理解框架、大量阅读源码。


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

技术人员都有自己的情怀,深陷其中而不被理解,欢迎关注个人微信公众平台:程序员互动联盟(coder_online),一个开发人员的家,来诉说自己的故事。

本文转载自:

共有 人打赏支持
lonely1986
粉丝 110
博文 34
码字总数 8686
作品 0
海淀
私信 提问
ubuntu编译最新版本WebKit

好久都没更新webkit 源码在ubuntu上编译了,网上搜了一下,基本上都是早期编译的webkit版本。可能是大家都去搞高大上的谷歌浏览器了吧。 今天就以ubuntu14.04版本作为编译环境来讲讲webkit编...

yistn
2015/04/22
0
3
ubuntu编译最新版本WebKit

好久都没更新webkit 源码在ubuntu上编译了,网上搜了一下,基本上都是早期编译的webkit版本。可能是大家都去搞高大上的谷歌浏览器了吧。 今天就以ubuntu14.04版本作为编译环境来讲讲webkit编...

lonely1986
2015/04/22
0
1
如何简单快速调试高大上的谷歌浏览器

上一篇我们简单的将了在Ubuntu上编译chromium,android contentshellapk的编译,一切顺利的就能生成apk。但是我们仅仅只是照搬了人家google开源的东西,作为一个开发者我们应带着探索的精神,...

yistn
2015/04/10
0
0
Ubuntu编译安装最新的webkit

好久都没更新webkit 源码在ubuntu上编译了,网上搜了一下,基本上都是早期编译的webkit版本。可能是大家都去搞高大上的谷歌浏览器了吧。 今天就以ubuntu14.04版本作为编译环境来讲讲webkit编...

东辉在线
2015/04/22
0
0
【译】你不知道的 Chrome 调试工具技巧 第十一天:style editors continued(样式编辑器后续)

特别声明 本文是作者 Tomek Sułkowski 发布在 medium 上的一个系列。据作者透露一共有 24 篇,一直更新到 12 月 24 日 版权归原作者所有。 作者在Twitter上推荐我们的中文翻译啦,截图在最后...

dendoink
12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS官方钱包keosd

EOS官方钱包的名称是keosd,它负责管理你的私钥,并且帮你进行交易的签名。 不过不幸的是,keosd钱包对普通用户并不友好,它是一个命令行程序,目前还没有像以太坊的mist那样的图形化界面,而...

汇智网教程
今天
25
0
ArrayList的实现原理以及实现线程安全

一、ArrayList概述 ArrayList是基于数组实现的,是一个动态的数字,可以自动扩容。 ArrayList不是线程安全的,效率比较高,只能用于单线程的环境中,在多线程环境中可以使用Collections.syn...

一看就喷亏的小猿
今天
33
0
Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
39
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
51
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部