WebKit之log调试
WebKit代码量较大,很多逻辑非常复杂,光使用断点调试,可能不能更直观看到想要观察的数据。一方面对于一些嵌套非常强的逻辑,例如:递归等,使用断点调试很难直观看到相互关系,WebKit中一个典型的递归应用就是对于render树等树形结构的的遍历,比如我们要打印出一个render树的各个节点,要直观的看到其结构,就需要使用Log另外一方面WebKit中很多对象巨大,变量隐藏很深,比如嵌套5,6个基类,并且还有智能指针的包裹,使得使用vc展开观看非常麻烦,所以传统的log打印对于我们来说仍然需要。 这里介绍webkit log打印部分,工程来自webkit.org下载的vc工程,在windows上编译通过。
可能使用者第一反应就是使用stdio里面的一些printf方法等,还有就是c++的cin,cout等,经笔者尝试都是徒劳的,不能显示出来。进一步研究发现,webkit在wtf里面专门做了打印的相关包装。WTF是一个子工程,其主要为WebKit提供各种基础工具,这里封装了,著名的智能指针,断言,log输出,内存分配管理,甚至重写了一套独立的容器类,比如hashmap,hashSet,Vector等,其中最为重要是智能指针的实现。其输出为\WebKitBuild\lib。
WTF里面Assertions.cpp提供了log输出的功能函数,其包装了vprintf_stderr_comm