zoukankan      html  css  js  c++  java
  • 深入研究Clang(八) Clang代码阅读之打log读流程1

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

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

    #include<stdio.h>

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

    第二步:找出如何在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" << ' ';

      //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

  • 相关阅读:
    【建兰普及模拟赛第一场】20181023
    【Uva11400 Lighting System Design】动态规划
    【洛谷 P2388 阶乘之乘】模拟
    【Uva1025 A Spy in the Metro】动态规划
    【洛谷P2028 龙兄摘苹果】动态规划
    【洛谷P1507 NASA的食物计划】动态规划
    【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟
    【洛谷P1281 书的复制】二分+动态规划
    【洛谷P4933 大师】动态规划
    「GXOI / GZOI2019」旧词
  • 原文地址:https://www.cnblogs.com/ainima/p/6331892.html
Copyright © 2011-2022 走看看