转自:http://blog.csdn.net/kuerjinjin/article/details/43937345

简介

众所周知chromium项目无比巨大,想去快速的了解,调试并添加自己想要的功能,学会使用chromium中的LOG可以使你省很多事儿!

1.从content shell开始

多数人首次接触chromium都感觉这个项目太过于庞大,总是有无从下手的感脚; 
如果我们想抛开它原有的界面单纯的去了解一下它怎么显示网页的?那么通过content api来了解chromium是一个不错的选择。

项目解决方案生成成功以后,我们可以从src\content\content_shell_and_tests.sln开始,设置content_shell项目为“启动项目”开始编译调试,具体打开content_shell_lib项目了解;界面很简单,界面上的简单布局我们可以从src\content\shell\browser\shell_views.cc了解到。 
我们可以自己去改一下看看效果,比如改一下初始的窗口位置大小: 
修改PlatformCreateWindow方法中的params.bounds

params.bounds = gfx::Rect(40, 40, width, height);
  • 1

找到src\content\shell\browser\shell.cc修改一下:

const int Shell::kDefaultTestWindowWidthDip = GetSystemMetrics(SM_CXSCREEN) - 160;
const int Shell::kDefaultTestWindowHeightDip = GetSystemMetrics(SM_CYSCREEN) - 160;
  • 1
  • 2

编译完成后看看是不是顺眼多了?首次启动要显示的网页我们也可以从src\content\shell\browser\shell_browser_main_parts.cc 
GetStartupURL方法做个修改,默认没有参数的时候打开的网页:

  if (args.empty())return GURL("http://www.baidu.com/");
  • 1
  • 2

再或者我们修改一下用户数据的位置src\content\shell\browser\shell_browser_context.ccInitWhileIOAllowed方法中:

CHECK(PathService::Get(base::DIR_MODULE, &path_));
  • 1

将用户数据直接保存在程序目录等等;当然这些都不是重点,说这么多只是让你对content shell有一个初步的了解。

补充几点: 
1.为了方便查看生成后的文件可以单独设置生成目录为src\out_content_shell

python  src\build\gyp_chromium -Goutput_dir=out_content_shell
  • 1

2.基本的依赖文件就只有“content_shell.exe”,“content_shell.pak”和“icudtl.dat”。 
当然你如果把原有的views\controls以及开发者工具等用到的资源等去掉的话content_shell.pak也可以进一步干掉;如果要保留对一些HTML5特性的支持的话d3dcompiler_46.dll,ffmpegsumo.dll,libEGL.dll ,libGLESv2.dll 也是可以保留的!


2.初步了解chromium中的LOG

content_shell.exe每次启动都会生成一个content_shell.log,这个文件的生成我们可以看一下src\content\shell\app\shell_main_delegate.cc中的InitLogging方法,这里就LOG的初始化有明确的演示:

  base::FilePath log_filename;PathService::Get(base::DIR_EXE, &log_filename);log_filename = log_filename.AppendASCII("content_shell.log"); logging::LoggingSettings settings; // log输出的位置 settings.logging_dest = logging::LOG_TO_ALL; // log的文件名 settings.log_file = log_filename.value().c_str(); // 是否锁定log文件 settings.delete_old = logging::DELETE_OLD_LOG_FILE; logging::InitLogging(settings); //log是否记录 [ 进程id,线程id,时间戳,精确时间 ] logging::SetLogItems(true, true, true, true); // 是否弹窗显示FATAL错误 logging::SetShowErrorDialogs(true); // 设置断言错误回调函数,当Assert失败的时候会调用这个函数 //logging::SetLogAssertHandler(MyLogAssertHandler); // 设置log回调函数,当输出log的时候会调用这个函数 //logging::SetLogMessageHandler(MyLogMessageHandler);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3.我们要学会使用的几个常用的LOG宏

1)LOG宏: 
LOG就像c++标准库的输出一样重载<<,它有几个常用的等级, 
像”VERBOSE“,“INFO”, “WARNING”, “ERROR”, “FATAL”,”NUM_SEVERITIES“等 
比如”FATAL”LOG会触发一个断点,并打印出栈回溯信息。

  LOG(INFO) << "info等级    = " << logging::LOG_INFO; LOG(WARNING) << "WARNING等级 = " << logging::LOG_WARNING; LOG(ERROR) << "ERROR等级 = " << logging::LOG_ERROR; LOG(FATAL) << "FATAL等级 = " << logging::LOG_FATAL;
  • 1
  • 2
  • 3
  • 4

使用LOG_IF宏可以在表达式条件为真的情况下才输出log:

  int if_int = 5;LOG_IF(INFO, if_int < 10 ) << "if_int < 10";
  • 1
  • 2

CHECK宏在表达式为假的情况下执行LOG(FATAL)的效果, 
如果没有附加调试器,还会生成一个crash dump。

  //CHECK宏,条件失败则产生一个LOG(FATAL)CHECK(0);
  • 1
  • 2

2)DLOG宏: 
DLOG跟LOG类似,不同的是DLOG只在DEBUG模式下才生效, 
在非DEBUG模式下,这部分代码都不会被编译进程序。

  DLOG(INFO) << "DLOG onlg debug";DLOG_IF(INFO, if_int < 10) << "DLOG_IF onlg debug";LOG_ASSERT(0); DLOG_ASSERT(0);
  • 1
  • 2
  • 3
  • 4

3)VLOG宏: 
这是一种可以通过命令行参数动态调整输出log策略的宏,这些宏都是INFO级别的。

4)PLOG宏: 
这中宏除了输出我们指定的输出信息,后面还附加有系统最后的错误信息, 
windows上是GetLastError(),POSIX上是errno的值。

TIPS:每个版本的LOG宏可能不一样,新版本可能都会添加一下东西,具体的详细英文注释都可以查看src\base\logging.h


待续……

学会使用Chromium中的LOG相关推荐

  1. Android内核开发:学会分析系统的启动log

    本文是<Android内核开发>系列的第八篇文章,本文主要关注如何分析Android系统的启动log,学会通过搜索重要的TAG标签,找到Android启动过程中的重要节点. 要学会分析系统 ...

  2. 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...

  3. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    原文:UWP开发入门(十九)--10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支 ...

  4. 开发chrome 插件, background.js中 console log 看不到解决方法

    开发chrome 插件, background.js中 console log 看不到解决方法 参考文章: (1)开发chrome 插件, background.js中 console log 看不到 ...

  5. Android开发过程中在sh,py,mk文件中添加log信息的方法

    Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...

  6. Android中对Log日志文件的分析

    Android中对Log日志文件的分析 如何分析和研究Log文件 ,如何看日志信息 Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没 ...

  7. android 6.0 log,android 6.0 logcat机制(二)logcat从logd中获取log保存到文件中

    一.设置保存log文件的路径 在手机刚开机的时候,会有类似如下命令执行 /system/bin/logcat -r 5120 -v threadtime -v usec -v printable -n ...

  8. Android中获取WebView加载的html中console.log输出的内容

    场景 Android中使用WebView加载本地html并支持运行JS代码和支持缩放: Android中使用WebView加载本地html并支持运行JS代码和支持缩放_BADAO_LIUMANG_QI ...

  9. android 6.0 logcat机制(二)logcat从logd中获取log保存到文件中

    这篇博客分析的是logcat是如何获取logd中的log,然后写入文件. 一.设置保存log文件的路径 在手机刚开机的时候,会有类似如下命令执行 /system/bin/logcat -r 5120 ...

最新文章

  1. STM32 基础系列教程 40 - Lwip_mqtt
  2. python fonttool_Python wx.Font方法代码示例
  3. C#中的样板命令行工具应用程序
  4. 服务器远程登录工具、文件运行以Python为例
  5. ps 命令的详细功能解析
  6. 算法:回溯十七 Combination Sum III挑选数组中规定个数元素的和为指定数
  7. 怎么查看linux系统硬盘,Linux系统下如何查看所有存储设备(磁盘分区)
  8. java学生选课系统下载_选课系统(java Swing) 用java开发的学生选课系统 - 下载 - 搜珍网...
  9. Android仿淘宝京东商品规格参数颜色筛选
  10. 阿达的红外射频遥控盒子(一)
  11. OpenStack腾讯云部署_Nova部署
  12. win10下台式电脑主机,无法播放声音解决办法。
  13. 【张亚飞】 准确、完整地把握Flash动画设计的知识体系——Flash用户入门必读...
  14. Android实现TTS语音播报
  15. 《Linux C编程从入门到精通》一1.3 Shell的使用基础
  16. 使用cucumber ,想把一个完整的流程,写成一个可执行的自动化测试脚本,应该如何划分 Scenario...
  17. mysql 查询各个时间段的数据
  18. 游戏mod(组模)模型,材质查看制作入门经典教程
  19. ElementUI中InfiniteScroll无法控制自动加载问题的解决
  20. 一文读懂区块链隐私技术系列之环签名

热门文章

  1. 《这就是搜索引擎:核心技术详解》---读后感
  2. hdu1787-GCD Again
  3. __purecall 链接错误
  4. python模拟布朗运动_python开发之thread实现布朗运动的方法
  5. python配置opencv最简单_【萌新】面向(Windows10)python的opencv环境配置“个人向”报错总结...
  6. Xamarin.Forms的ActivityIndicator和ProgressBar比较
  7. Beaglebone Black开发板安装驱动
  8. 面试pythonweb开发的简历_【经验分享】对于Python各个方向的面试经验分享,非常给力!...
  9. 服务器系统tcpip.sys,tcpip.sys
  10. 东财在线计算机第一套作业,东财在线21春《计算机网络基础》第一套作业题目及答案...