Breakpad崩溃报告系统介绍

Breakpad是Google开发的一套开源的崩溃报告系统,它是跨平台的,支持Windows、Linux、Mac等操作系统,被Chrome、Firefox等各大软件采用。最近做Chromium内核升级,需要把Breakpad升级成Crashpad,故再看看Breakpad项目的实现,写篇博客总结一下。 Breakpad的机制 如上图所示是Breakpad的工作机制,它是参考Windows上那套崩溃处理机制。Windows上面编译器把代码编译成可执行文件,同时生成包含调试信息的PDB符号文件。程序运行发生崩溃时,将崩溃的堆栈等信息存储成一个dump文件。调试器打开dump文件并读取PDB里面的调试信息,就可以看到崩溃的堆栈。因为Breakpad是跨平台的,所以在Linux等其他平台也实现了Windows上的生成调试符号、生成dump、处理dump等功能。 Breakpad分为3个主要的模块: Client。Client模块会被编译到客户端程序中,它的职责包括捕获客户端的异常、生成崩溃的dump文件、上报dump文件到服务器。在Windows平台,我们只需要这部分就足够了。 Symbol... Read More | Share it now!

踏破铁鞋无觅处

最近学习Chromium的UI渲染,于是编译一下ui/views/examples的例子工程来看看。运行views_examples_exe,发现界面是上下颠倒显示。 一开始以为是例子工程可能好久没有维护了,在代码升级的过程中出了偏差,导致界面颠倒显示。于是自己动手写了一个例子工程,也是颠倒显示。看了下aura_demo工程界面的坐标,显示也是颠倒。我意识到这不是Aura层的问题,可能是CC模块通过GPU硬件加速渲染出来的结果本身就是颠倒的。 我家虚拟机里有Chromium... Read More | Share it now!

Chromium fast start机制

我们知道Chromium有一个Browser进程,多个Renderer进程。如果已经运行了Chromium浏览器,再通过快捷方式启动浏览器,会打开新的浏览器窗口,显示新标签页。或者创建一个新的浏览器进程,给它传递一个url参数,比如https://www.baidu.com/,就会在现有的窗口里面打开一个百度的页面。查看浏览器的进程,发现仍然只有Browser进程,那么第二次创建的新创建的进程哪里去了呢? 这就是Chromium的fast... Read More | Share it now!

Chrome HTTP Transport Security

传统的HTTP连接很容易被中间人攻击。比如当网络流量经过网络运营商的时候,运营商为了私利可能会在HTTP的数据中插入它自己的广告链接,也可能会把HTTP请求重定向到别的网址。随着现代浏览器对HTTPS的支持越来越普遍,很多重要的网站例如www.baidu.com把HTTP协议升级成HTTPS,保证网站的内容在传输的过程中不被篡改。然而大部分普通用户还是习惯在地址栏里输入HTTP网址来访问网站,互联网中也有很多的链接还是HTTP。为了保证兼容性,网站的后台可以把HTTP请求重定向到HTTPS,但是这有两个问题。一是客户端浏览器发起请求还是HTTP,这个过程可能会被中间人攻击,二是网站服务端每次都把HTTP重定向到HTTPS会增大服务器的负担。 HTTP... Read More | Share it now!

Chromium多线程

之前也写过Chromium多线程相关的博客,就不再重复了。这两天基于Chromium50画了一下Thread相关的图,想到了一个恰当的比喻,分享一下。 这是相关的类图。 我们把线程Thread比喻成一个机器人,我们告诉机器人怎么做事,那我们就可以跟机器人并行做一些事情。 我们把要做的事情按照协议打包成一个Task,这个Task包含各种所需的信息,机器人拿到Task就知道该如何做事。打包Task就是使用base::Bind接口返回一个无参数无返回值的Callback,这样特殊的Callback称之为Closure。 一开始机器人是出于关机状态的,所以需要调用Thread::Start开动机器人。然后机器创建一个UI交互界面MessageLoop,我们可以通过task_runner给这个MessageLoop... Read More | Share it now!

Chromium开发有用链接

收集一些Chromium开发用到的实用网址链接,不定时更新。 Chromium开发者文档。http://dev.chromium.org/developers/ Chromium设计文档。http://dev.chromium.org/developers/design-documents Chromium开发者论坛群组。https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev Chromium代码搜索。https://cs.chromium.org/ Chromium发布日历。https://www.chromium.org/developers/calendar ... Read More | Share it now!

Chrome extension features

Chrome浏览器一个非常厉害的地方是建立了一个强大的extension系统,提供了丰富的浏览器extension接口。我们打开Chrome网上应用商店https://chrome.google.com/webstore/category/extensions,可以看到第三方开发者用这些extension接口做出各种各样的扩展程序,比如广告过滤、视频下载等等。 Chrome的extension系统提供的extension接口在Chrome的代码实现里称之为“extension... Read More | Share it now!

避免编译器优化掉代码

c++代码编译成Release版本,编译器会做一些优化,生成的二进制可执行文件执行更快,体积更小。这种优化会复用栈上不同变量的空间,导致调试的时候,有些局部变量看不到了。比如如下代码: 在调试的的时候,调试器直接运行到printf(“%d”,... Read More | Share it now!