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.com
本論文ではまず、簡単に
woboqcodebrowser仕事原理概要
まず、は、まず は次に、 最後に、私たちはこれらのHTMLファイルをあるWebサーバーにコピーすることができます.ブラウザでC/C++プロジェクトのソースコードを楽しく閲覧することができます. woboqcodebrowserのコンパイルとインストール
本論文はUbuntu 18.04 LTSにおいて、ソースコンパイルによって
1.ソースを取得する
gitを通じて
特に、dataディレクトリのファイルはソースではなく、いくつかのホームページデータです.Javascriptスクリプトファイル、CSSファイル、および多くのpngフォーマットの写真を見ることができます.これらのウェブページデータは、
もう一つの注意が必要です.READMEファイルを読むことによって、Ubuntuシステム上のLLVMのバージョンは7バージョン以上が必要です.そうでないと、ClangConfig.cmakeファイルのエラーを報告できません.これは実はLLVMのbugではなく、debianパケット管理によって出現した一つのbugであることがissue菗74によって分かりました.そのため、次のステップでコンパイルするときに、特定のバージョンのコンパイラを指定して、このピットを避けることができます.
2.コンパイルインストール
g++コンパイルを使う
命令は以下の通りです.(私のg++バージョンは(Ubuntu 8.4-1 ubuntu 1~18.04)8.4.0:
clang++コンパイルを使う
コマンドは以下の通りです
woboqcodebrowserの使用
ここではLIEFというプロジェクトを通して、
1.comppile_を取得するcommands.jsonファイル
2.codebrowerを使うgeneratorがHTMLを生成する
まず、 3.codebrowser_を使用するindexgeneratorは各ディレクトリのためにindexを生成します.
コマンド
ここでは、nginxを使って、現地でウェブサーバを構築して使うことを勧めます.
参照リンク
「Complation databases for Clang-based tools」「Complation database」「JSON Complation Database Format Specification」
学習の仕事の中でC/C++プロジェクトコードを読んで、Windowsの下で大多数の人はSource Insightというツールを使っていますが、Linuxの下ではvimとctagsを合わせて使うのが好きです.しかし、これらには共通の問題があります.つまり、C++プロジェクトのシンボルの解析が不十分で、たとえば演算子のキャリアオーバー関数宣言からその定義にジャンプすることをサポートしていません.Google検索を通じて、より良いツールが欲しいです.ここでお勧めするツールがwoboq_です.codebrowser
ホームページhttps://woboq.com
woboq_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.を生成する.本論文はUbuntu 18.04 LTSにおいて、ソースコンパイルによって
woboq_codebrowser
をインストールする完全な手順を示している.1.ソースを取得する
gitを通じて
woboq_codebrowser
ソースのcloneを現地に送ります.$ git clone https://github.com/woboq/woboq_codebrowser
この中のgeneratorとindexgeneratorディレクトリのコードはそれぞれ命令codebrowser_generator
とcodebrowser_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は-a
にwoboq_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の名前を含む.コマンド
-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」