woboq_を使うcodebrowserはC/C+ソースを読みます.

9046 ワード

記事の目次
  • どうして本文を書きますか?
  • woboq_codebrowser仕事原理紹介
  • woboq_codebrowserのコンパイルとインストール
  • .ソースを取得する
  • .コンパイル
  • g+コンパイルを使う
  • clang+コンパイルを使用して
  • woboq_codebrowserの使用
  • .*comple_を取得する.commands.jsonファイル*
  • .codebrowerを使用する.generator生成HTML
  • 3.codebrowser uを使用する.indexgeneratorは、各ディレクトリのためにindex.
  • を生成する.
  • .生成したすべてのファイルをウェブサーバ
  • にコピーする.
  • 参照リンク
  • なぜ本文を書きますか
    学習の仕事の中でC/C++プロジェクトコードを読んで、Windowsの下で大多数の人はSource Insightというツールを使っていますが、Linuxの下ではvimとctagsを合わせて使うのが好きです.しかし、これらには共通の問題があります.つまり、C++プロジェクトのシンボルの解析が不十分で、たとえば演算子のキャリアオーバー関数宣言からその定義にジャンプすることをサポートしていません.Google検索を通じて、より良いツールが欲しいです.ここでお勧めするツールがwoboq_です.codebrowser
    ホームページhttps://woboq.comwoboq_codebrowserを用いて解析されたいくつかの大型C/C+プロジェクトを示した.Qt_Gibc_124 LLVM_Boost_GCC_Linuxを含む.実際の体験によって、woboq_codebrowserは確かに強く、特にC++のシンボルに対してより細かく解析されることが分かった.
    本論文ではまず、簡単にwoboq_codebrowserの動作原理を紹介し、次にwoboq_codebrowserを一歩ずつ導入し、最後に実際にそれを使って一つのC+プロジェクトを解析し、完全にwoboq_codebrowserの使い方を示します.woboq_codebrowserはもちろん、その欠点があります.コード編集はサポートされていません.
    woboqcodebrowser仕事原理概要
    まず、woboq_codebrowserの仕事の原理を大体理解しましょう.woboq_codebrowserは、LLVM/Clangに基づいて実現される命令ラインツールである.深さ解析C/C++ソースから最終的に必要な静的HTMLファイルを生成します.woboq_codebrowserは、codebrowser_generatorおよびcodebrowser_indexgeneratorの2つのサブコマンドを含む.HTMLファイルを作成して、最終的にはブラウザでコードを読むことができます.全体は三つのステップに分けられます.
  • は、まずcodebrowser_generatorを通じて解析して.hと.cppに対応する.h.htmlと.cpp.を生成する.
  • は次に、codebrowser_indexgeneratorを介してすべてのディレクトリのindex.を生成する.
  • 最後に、私たちはこれらのHTMLファイルをあるWebサーバーにコピーすることができます.ブラウザでC/C++プロジェクトのソースコードを楽しく閲覧することができます.
  • woboqcodebrowserのコンパイルとインストール
    本論文はUbuntu 18.04 LTSにおいて、ソースコンパイルによってwoboq_codebrowserをインストールする完全な手順を示している.
    1.ソースを取得する
    gitを通じてwoboq_codebrowserソースのcloneを現地に送ります.
    $ git clone https://github.com/woboq/woboq_codebrowser
    
    この中のgeneratorとindexgeneratorディレクトリのコードはそれぞれ命令codebrowser_generatorcodebrowser_indexgeneratorのソースコードです.
    特に、dataディレクトリのファイルはソースではなく、いくつかのホームページデータです.Javascriptスクリプトファイル、CSSファイル、および多くのpngフォーマットの写真を見ることができます.これらのウェブページデータは、make installのデフォルトのinstall prefix/usr/localであるような、woboq_codebrowserおよびcodebrowser_generatorにおいて、最終的には/usr/local/binディレクトリにインストールされ、dataディレクトリは/usr/local/share/woboqディレクトリにコピーされる.
    もう一つの注意が必要です.READMEファイルを読むことによって、Ubuntuシステム上のLLVMのバージョンは7バージョン以上が必要です.そうでないと、ClangConfig.cmakeファイルのエラーを報告できません.これは実はLLVMのbugではなく、debianパケット管理によって出現した一つのbugであることがissue菗74によって分かりました.そのため、次のステップでコンパイルするときに、特定のバージョンのコンパイラを指定して、このピットを避けることができます.
    2.コンパイルインストールcodebrowser_indexgeneratorはcmakeを使用して構築する必要があるので、cmakeがインストールされていることを確認する必要がある.cmakeはg+でコンパイルするか、それともclang+でコンパイルするかを教えてください.
    g++コンパイルを使う
    命令は以下の通りです.(私のg++バージョンは(Ubuntu 8.4-1 ubuntu 1~18.04)8.4.0:
    # gcc
    cmake . -DCMAKE_BUILD_TYPE=Release \
            -DCMAKE_CXX_COMPILER=g++ \
            -DLLVM_DIR="/usr/lib/llvm-7/cmake"
    make && sudo make install
    
    気がつきましたか私は指定LLVM_を通じてDIRはLLVM-7の経路であり、これは先ほど言及したissue菗74の問題を回避した.もちろん、より高いバージョンのLLVMパスを指定してもいいです.
    clang++コンパイルを使う
    コマンドは以下の通りです
    $ cmake . -DCMAKE_BUILD_TYPE=Release \
    		-DCMAKE_CXX_COMPILER=clang++ \
    		-DLLVM_DIR="/usr/lib/llvm-7/cmake"
    $ make && sudo make install
    
    これまで、思わぬことがなかったらwoboq_codebrowserをコンパイルしてインストールしました.
    woboqcodebrowserの使用
    ここではLIEFというプロジェクトを通して、woboq_codebrowserを使用した具体的なステップを詳細に示します.
    1.comppile_を取得するcommands.jsonファイルwoboq_codebrowserファイルは一種の特定のフォーマットのcomplation databaseファイルであり、いわゆるcomplation databaseは実は簡単であり、その中に記録されているのは各ソースファイルのコンパイル時の詳細な情報(ファイルパス、ファイル名、コンパイルオプションなどを含む)です.compile_commands.jsonファイルは、LibToolingに必要なJSON形式で提示されるcomplation databaseファイルであり、以下に切り取るのはcompile_commands.jsonの中の一つのentryである.
    [
    ...
        {
            "arguments": [
                "c++",
                "-c",
                "-g",
                "-O2",
                "-Werror",
                "-std=c++0x",
                "-Wall",
                "-fPIC",
                "-o",
                "attrs.o",
                "attrs.cc"
            ],
            "directory": "/home/astrol/libelfin/dwarf",
            "file": "attrs.cc"
        },
    ...
    ]
    
    前に述べたcompile_commands.jsonはLLVM/Clangに基づいて実現されるツールであり、自然もwoboq_codebrowserに基づいてソース関係を分析するものである.つまり、compile_commands.jsonを使用するには、まずwoboq_codebrowserファイルを生成しなければならない.プロジェクトがcmakeで構築された場合、おめでとうございます.compile_commands.jsonを追加すればいいです.従来のmake build systemであれば心配しないでください.Beaerとcompdbツールは-DCMAKE_EXPORT_COMPILE_COMMANDS=ONファイルを生成してくれます.特に、Androidは7.0バージョン以降、システムを構築してSoongに変換してからも対応する方法を提供しています.
    2.codebrowerを使うgeneratorがHTMLを生成する
    まず、compile_commands.jsonの一般的なパラメータの意味を簡単に理解すると、woboq_codebrowserを介してより多くのパラメータが見られます.
  • woboq_codebrowser --help process all files from the comple le_ucommands.json.If this argment is not passed、the list of files to process need to be passedは-awoboq_codebrowserに記録された各ファイルを処理すると教えています.
  • compile_commands.json Output directory where the generant files will be putは、-o=が生成したHTMLがどのディレクトリに格納されているかを教えてくれます.
  • woboq_codebrowser Path to the complation database If this argment is not passed、the complation argment can be passed on the command line after'–-b=はどの経路でwoboq_codebrowserを見つけることができますか?
  • compile_commands.json Project specification:The name of the project、the absoute path of the source code、and the revision separated by colons、Example:p projectname:/path/source/code:berevice/code:projectは現在のprojectの名前を含む.
  • 3.codebrowser_を使用するindexgeneratorは各ディレクトリのためにindexを生成します.
    コマンド-p=<:[:]>の使用はwoboq_codebrowserよりも簡単であり、後頭部が直接にパスを指定すれば良い.今はLIEFを列にしています.
    #/usr/bin/env bash
    DATA_DIRECTORY=/usr/local/share/woboq/data
    OUTPUT_DIRECTORY=/tmp/lief
    if [ -d ${OUTPUT_DIRECTORY} ]; then
        rm -rf ${OUTPUT_DIRECTORY}/*
    else
        mkdir -p ${OUTPUT_DIRECTORY}
    fi
    BUILD_DIRECTORY=$PWD
    SOURCE_DIRECTORY=$PWD
    VERSION=`git describe --always --tags`
    
    codebrowser_generator -color -a -b $BUILD_DIRECTORY -o $OUTPUT_DIRECTORY \
            -p LEIF:$SOURCE_DIRECTORY:$VERSION -d ${DATA_DIRECTORY}
    codebrowser_indexgenerator $OUTPUT_DIRECTORY
    cp -rfd $DATA_DIRECTORY $OUTPUT_DIRECTORY
    
    4.生成したすべてのファイルをウェブサーバにコピーする
    ここでは、nginxを使って、現地でウェブサーバを構築して使うことを勧めます.
    参照リンク
    「Complation databases for Clang-based tools」「Complation database」「JSON Complation Database Format Specification」