深入研究Clang(八) Clang代码阅读之打log读流程1

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 这个过程简单的分为几步。第一步:写一个简单的小程序,hello.c。内容如下:#includeint main() {  printf("Hello world!\n");}第二步:找出如何在LLVM里面输出信息,最后选择采用llvm::errs(),等于采用了LLVM的错误机制。

这个过程简单的分为几步。

第一步:写一个简单的小程序,hello.c。内容如下:

#include<stdio.h>

int main() {
  printf("Hello world!\n");
}

第二步:找出如何在LLVM里面输出信息,最后选择采用llvm::errs(),等于采用了LLVM的错误机制。包括llvm::errs()所需的头文件。具体内容如下:


//shining add begin
#include "llvm/Support/raw_ostream.h"
//shining add end

  //shining add begin
  llvm::errs() << "clang/tools/driver/driver.cpp/main()/shining_add" << '\n';

  //shining add end

注:为了标明代码是我自己添加的,所以在添加的log信息前后都加了注释。

第三步:采用clang3.9.0代码,在我知道的几个点随意添加了几个log信息,信息内容如上一步所示,主要是标明插入log的函数的相关信息,都放在了函数的第一条语句处。编译该clang之后,使用命令clang hello.c -o hello编译hello.c,可以得到如下输出信息:

clang/tools/driver/driver.cpp/main()/shining_add

clang/tools/driver/driver.cpp/main()/shining_add
clang/tools/driver/cc1_main.cpp/cc1_main()/shining_add
clang/lib/CodeGen/CodeGenAction.cpp/CodeGenAction::ExecuteAction()/shining_add
clang/lib/Sema/Sema.cpp/Sema::Sema()/shining_add
clang/lib/Parse/ParseAST.cpp/ParseAST(Sema)/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
clang/lib/Lex/Lexer.cpp/Lexer::InitLexer()/shining_add
基本上我所插入的log信息都打印出来了,这里可以看到clang编译一个简单的程序,所经历的大的点。后续会在此基础之上,再分块进行分析代码和流程。开这么个头,方便自己,也为想读clang源码的朋友们提供一个思路。这个思路简单易行,根据我提供的几个点,也可以继续深入去分析自己感兴趣的地方。

代码和修改后的代码,我也建了一个代码库,地址:https://github.com/shining1984/clang_code_comment

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
存储 监控 Cloud Native
|
6月前
|
SQL 存储 关系型数据库
redo log 的执行流程?
redo log 的执行流程?
|
3月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
5月前
|
存储 监控 Cloud Native
云原生日志处理流程
【6月更文挑战第14天】云原生平台中的日志处理包括9个步骤:收集、ETL、索引、存储、检索、关联、可视化、分析和报告。
|
Java API
LOG4J2-MDC-全链路跟踪等功能研究
LOG4J2-MDC-全链路跟踪等功能研究
318 0
|
存储 算法 Java
JVM学习日志(十三) G1垃圾回收流程 及 垃圾回收器总结
G1垃圾回收流程 及 垃圾回收器 总结 简述
204 0
JVM学习日志(十三) G1垃圾回收流程 及 垃圾回收器总结
|
6月前
|
存储 缓存 关系型数据库
MySQL update执行流程到 redo log深入理解
MySQL update执行流程到 redo log深入理解
84 0
|
缓存 监控 前端开发
JVM学习日志(三) Java代码执行流程
简述 Java代码执行流程
104 0
JVM学习日志(三) Java代码执行流程
|
存储 数据采集 监控
阿里云SLS简介和购买流程
阿里云SLS是阿里巴巴集团旗下的一款日志服务产品。作为阿里云日志服务的核心组成部分,阿里云SLS(Simple Log Service)为企业提供了一种高效、安全、稳定的日志收集、存储、检索和分析解决方案。
|
JSON API 数据安全/隐私保护
【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权
【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权