Prog/TagSystem/rtags
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#d598aa76]
#contents();
/////////////////////////////////////////////////////////...
* rtags [#aded69fa]
- rtags は、llvm をバックエンドに使用したタグ検索システム。
- コンパイラのライブラリを使って解析する為、同名の関数や...
- サーバ&クライアントシステムになっている。
-- rtags システムにはコンパイル方法を入力し(直接コンパイ...
-- クライアントからの問い合わせを受けてからサーバが解析を...
- Linux kernel のような巨大な project では、タグ生成の為...
- コメント文字列のような、コンパイルに使われないものにつ...
- このように、cscope や gtags 等の他のタグシステムとは長...
//=======================================================...
** 環境構築(debian パッケージを使用) [#build-env-debian...
+ 必要な関連パッケージをインストールする
# apt-get install rtags
+ コマンド名はオリジナルから若干アレンジされているので注...
|>|~コマンド名 |
|~オリジナル |~debian パッケージ版 |
|rc |rtags-rc |
|rdm |rtags-rdm |
|rp |rp |
-- rtags-rc に関しては、9base パッケージの rc コマンドと...
-- 記載が煩雑になるが、本頁では rc, rdm について、説明文...
//=======================================================...
** 環境構築(自前ビルド) [#build-env-build]
+ 必要な関連パッケージをインストールする
# apt-get install clang libclang-dev cmake
+ rtags をビルドする(rtags がディストリビューションでパ...
++ コードを取得する
$ git clone --recursive https://github.com/Andersbakken/...
++ ビルドする
$ cd rtags
$ git submodule init
$ git submodule update
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
~
+ rtags をインストールする
-- ビルドすると rtags/build/bin に以下の実行形式が生成さ...
$ ls rtags/build/bin
rtags-rc rtags-dm rp
//=======================================================...
** タグを生成する [#u9c384fe]
+ まず、daemon を起動する
$ rtags-dm --daemon
+ タグを生成する方法は2つある
//-------------------------------------------------------...
*** 1. rc コマンドに直接渡す [#p77de85a]
- 実際に compile するときのコマンドを rc に渡す。
$ rtags-rc gcc $(CFLAGS) $(SRCS)
//-------------------------------------------------------...
*** 2. rc -Jコマンドで compile_commands.json を読み込ませ...
- compile_commands.json の生成方法は、[[compile_commands....
- rc -Jコマンドで compile_commands.json を読み込ませる
$ rtags-rc -J <compile_commands.jsonが置かれているディレ...
-- ここでエラーになる場合、compile_commands.json が無意味...
--- 原因としては、ビルド済みの環境で bear コマンドを走ら...
--- 対策としては、make clean してから再度 bear -- make を...
-- compile_commands.json の中でのソースファイル等のパスは...
//=======================================================...
** rtags-rdm の終了 [#ta139a3e]
- rdm を終了するには、 rc にて以下のコマンドを実行する:
$ rtags-rc -q
//=======================================================...
** プロジェクト情報の unload [#w3a904bc]
- rtags サーバ (rdm / rtags-rdm) は、quit しても、それま...
- load したプロジェクト情報を rtags サーバに忘れさせるに...
-- 指定したプロジェクトを unload する。
$ rtags-rc --delete-project [keyword-project-to-be-delet...
--- [keyword-project-to-be-deleted] にマッチする全ての pr...
-- 全ての project 情報を unload する。
$ rtags-rc --clear
//=======================================================...
** current project の切り替え [#x4de7023]
- 複数の project を読み込んでいる時、current project にな...
- そうした場合に、検索対象のコードが属する project を cur...
$ rtags-rc -p <current projectにしたいproject>
-- <current projectにしたいproject> は、rtags-rc -p を引...
//=======================================================...
** トラブルシューティング [#ca4c6252]
//-------------------------------------------------------...
*** "Can't seem to connect to server (/run/user/1000/rdm....
- rtags-rdm のプロセスが存在するが、ソケットが存在しない...
- pgrep で PID を確認し、その PID を指定して強制終了する。
-- 実行例:
$ pgrep -l rtags
19044 rtags-rdm
$ kill -KILL 19044
- 上記の実施後、改めて rtags-rdm を起動し、コンパイル情報...
/////////////////////////////////////////////////////////...
* emacs から rtags を使う [#rtags-emacs]
//=======================================================...
** emacs の設定 [#b2c2d73e]
- ディストリビューションで提供しているパッケージで rtags ...
build/src/rtags.el
- rtags.el の標準のキーバインドは、rtags.el を読み込んだ...
(rtags-enable-standard-keybindings); enable rtags standa...
- submenu-list も、必要なら同様に設定する:
(rtags-submenu-list) ; enable rtags submen...
- init.el の設定例
;;; rtags.el の設定
(when (require 'rtags nil 'noerror)
(when (executable-find "rtags-rc")
(setq rtags-rc-binary-name "rtags-rc")) ; debian ...
(when (executable-find "rtags-rdm")
(setq rtags-rdm-binary-name "rtags-rdm")) ; debian ...
(defun rtags-local-conf ()
(rtags-mode)
(rtags-start-process-unless-running)
(setq rtags-autostart-diagnostics t)
(rtags-diagnostics)
(setq rtags-completions-enabled t)
(rtags-enable-standard-keybindings) ; enable rtags s...
(rtags-submenu-list) ; enable rtags s...
;;; キーバインド:ネットでよく見掛ける設定だが、行末...
; (local-set-key (kbd "M-.") 'rtags-find-symbol-at-p...
; (local-set-key (kbd "M-;") 'rtags-find-symbol) ...
; (local-set-key (kbd "M-@") 'rtags-find-references)...
; (local-set-key (kbd "M-,") 'rtags-location-stack-b...
; (local-set-key (kbd "M-<") 'rtags-location-stack-b...
; (local-set-key (kbd "M->") 'rtags-location-stack-f...
;;; キーバインド:実際にはこちらを使う
;;; xcscope.el に操作感を似せつつ、併用出来るようキ...
(local-set-key (kbd "C-c d d") 'rtags-find-symbol-at...
(local-set-key (kbd "C-c d s") 'rtags-find-symbol)
(local-set-key (kbd "C-c d r") 'rtags-find-all-refer...
(local-set-key (kbd "C-c d c") 'rtags-find-all-funct...
(local-set-key (kbd "C-c d f") 'rtags-find-file)
(local-set-key (kbd "C-c d i") 'rtags-symbol-info)
(local-set-key (kbd "C-c d m") 'rtags-imenu)
(local-set-key (kbd "C-c d t") 'rtags-taglist)
(local-set-key (kbd "C-c d C") 'rtags-print-class-hi...
(local-set-key (kbd "C-c d <") 'rtags-location-stack...
(local-set-key (kbd "C-c d >") 'rtags-location-stack...
(define-key rtags-mode-map "p" 'rtags-previous-match)
(define-key rtags-mode-map "n" 'rtags-next-match)
)
(add-hook 'c-mode-common-hook 'rtags-local-conf)
(add-hook 'c++-mode-common-hook 'rtags-local-conf)
(add-hook 'objc-mode-hook 'rtags-local-conf)
)
-- 上記では、Debian / Ubuntu のパッケージで rc, rdm のコ...
//=======================================================...
** rtags.el の標準キーバインド [#t5a7c8b3]
|~binding |~function |~...
|C-c r ,|rtags-find-references-at-point |...
|C-c r .|rtags-find-symbol-at-point |...
|C-c r /|rtags-find-all-references-at-point |...
|C-c r ;|rtags-find-file |...
|C-c r <|rtags-find-references | ...
|C-c r >|rtags-find-symbol |...
|C-c r A|rtags-find-functions-called-by-this-function |...
|C-c r B|rtags-show-rtags-buffer | ...
|C-c r C|rtags-compile-file | ...
|C-c r D|rtags-diagnostics | ...
|C-c r E|rtags-preprocess-file | ...
|C-c r F|rtags-fixit | ...
|C-c r G|rtags-guess-function-at-point | ...
|C-c r I|rtags-imenu | ...
|C-c r K|rtags-make-member | ...
|C-c r L|rtags-copy-and-print-current-location |...
|C-c r M|rtags-symbol-info |...
|C-c r O|rtags-goto-offset | ...
|C-c r P|rtags-dependency-tree-all | ...
|C-c r R|rtags-rename-symbol | ...
|C-c r S|rtags-display-summary | ...
|C-c r T|rtags-taglist |...
|C-c r U|rtags-display-summary-as-message | ...
|C-c r V|rtags-print-enum-value-at-point |e...
|C-c r X|rtags-fix-fixit-at-point | ...
|C-c r Y|rtags-cycle-through-diagnostics | ...
|C-c r Z|rtags-location-stack-visualize | ...
|C-c r [|rtags-location-stack-back |...
|C-c r ]|rtags-location-stack-forward |...
|C-c r _|rtags-asm-file | ...
|C-c r a|rtags-expand-auto | ...
|C-c r e|rtags-reparse-file | ...
|C-c r h|rtags-print-class-hierarchy |...
|C-c r l|rtags-list-results | ...
|C-c r p|rtags-dependency-tree |...
|C-c r t|rtags-references-tree |...
|C-c r v|rtags-find-virtuals-at-point | ...
//=======================================================...
** 機能(一部のみ) [#saa05fe7]
- 数多く定義されている API のうち、比較的使う機会の多い一...
//-------------------------------------------------------...
*** rtags-find-symbol-at-point : カーソルが置かれたシンボ...
|~カーソルが指しているもの |~ジャンプ先 |~備考 |
|実体やポインタ変数 |定義位置 | |
|型名 |型の定義位置 | |
//-------------------------------------------------------...
*** rtags-print-class-hierarchy : クラス階層構造の表示 [#...
- クラスの型名にカーソルを置いて実行すると、そのクラスの...
- 例
Superclasses:
class TestDataB c++/polymorphism/test_data_b.h:6:7: cl...
class TestDataIF c++/polymorphism/test_data_if.h:4:7...
//-------------------------------------------------------...
*** rtags-find-all-references-at-point : 参照元(=呼び出...
- xcscope の cscope-find-this-symbol と大体同じ。
//-------------------------------------------------------...
*** 検索履歴の移動 [#q15cfd46]
- rtags-location-stack-back
-- 検索する前の位置に戻る
-- 前回検索後からカーソルを移動していた場合、前回検索した...
- rtags-location-stack-forward
-- rtags-location-stack-back で1回以上履歴を戻った後、再...
-- 当然ながら、一度も rtags-location-stack-back を実行し...
//-------------------------------------------------------...
*** rtags-taglist [#o67e241d]
- 全てのシンボルに関する tag の一覧を表示する
/////////////////////////////////////////////////////////...
* Makefile に rtags 用 tag 生成の target を仕込む(おまけ...
- 下記を Makefile の target として仕込み、
$ make rtags
とすれば、tag 生成までの一通りの処理が実行される(但し、 ...
# for rtags:
RTAGS_CMD_RC := /usr/bin/rtags-rc
RTAGS_CMD_RDM := /usr/bin/rtags-rdm
BEAR_CMD := /usr/bin/bear
COMPILE_DB_FILE := compile_commands.json
IS_RTAGS_RDM_STARTED := $(shell ls -1 /run/user/$(shell ...
rtags : rtags-kill-daemon rtags-delete-compile-db clean ...
rtags-kill-daemon :
ifeq ($(IS_RTAGS_RDM_STARTED),1)
pgrep rtags-rdm | xargs kill -KILL;
endif
rtags-delete-compile-db :
$(RMF) $(COMPILE_DB_FILE)
rtags-start-daemon :
$(RTAGS_CMD_RDM) --daemon;
rtags-create-compile-db :
$(BEAR_CMD) -- make;
rtags-load-compile-db :
$(RTAGS_CMD_RC) -J .;
/////////////////////////////////////////////////////////...
* トラブルシューティング [#mb3e0b08]
//=======================================================...
** daemon 起動が SIGABRT (=6) で失敗する [#dcc02d36]
- 失敗時
$ rtags-rdm --daemon
rtags-rdm: ./src/Location.h:275: static void Location::s...
Caught signal 6
/usr/bin/rtags-rdm(+0x72762)[0x5587b57d3762]
/lib/x86_64-linux-gnu/libc.so.6(+0x38d60)[0x7fea6277cd60]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x141)[0x7fea627...
/lib/x86_64-linux-gnu/libc.so.6(abort+0x123)[0x7fea62766...
/lib/x86_64-linux-gnu/libc.so.6(+0x2240f)[0x7fea6276640f]
/lib/x86_64-linux-gnu/libc.so.6(+0x31662)[0x7fea62775662]
/usr/bin/rtags-rdm(_ZN8Location3setERK4Pathj+0x1cb)[0x55...
/usr/bin/rtags-rdm(_ZN7Project11readSourcesERK4PathR14In...
/usr/bin/rtags-rdm(_ZN7Project4initEv+0x23a)[0x5587b58f2...
/usr/bin/rtags-rdm(_ZN6Server10addProjectERK4Path+0x102)...
/usr/bin/rtags-rdm(_ZN6Server4loadEv+0x107a)[0x5587b5806...
/usr/bin/rtags-rdm(_ZN6Server4initERKNS_7OptionsE+0x10d7...
/usr/bin/rtags-rdm(main+0x2734)[0x5587b57d1424]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea)[...
/usr/bin/rtags-rdm(_start+0x2a)[0x5587b57d364a]
- 対処法: --clean-slate (または -C) オプションを使って...
$ rtags-rdm -C
$ rtags-rdm --daemon
/////////////////////////////////////////////////////////...
* バージョン組み合わせメモ [#v824a60e]
- 動作が確認出来た組み合わせは以下の通り:
|>|>|~version |~distribution |~remark |
|~rtags |~rtags.el |~emacs |~|~|
|2.38-3 |2.41.133 |29.1 |Debian 11 (bullseye) |emacs ...
|2.38-3 |2.41.133 |28.2 |Debian 11 (bullseye) |emacs ...
|2.38-3 |2.38.130 |27.1 |Debian 11 (bullseye) |いずれ...
|2.37-1 |2.37.130 |26.3 |Ubuntu 20.04 (focal) |emacs ...
/////////////////////////////////////////////////////////...
* linux kernel に使えるか? [#febdfd95]
- 対象:linux-6.1.1
- compile_command.json 生成
-- bear コマンドを使ったところ、ビルド開始から json 生成...
|~CPU |i7-1165G7 |
|~Memory |32GB |
|~Storage |MZVLB1T0HBLR-000L7 (Samsung) |
-- 指定したオプションでコンパイル対象となっていないファイ...
/////////////////////////////////////////////////////////...
* compile_commands.json の生成方法 [#create_compile_comma...
- compile_commands.json の生成方法には、以下の方法がある
//=======================================================...
** bear を使った compile_commands.json の生成 [#w48bd344]
- &color(red){注:下記の make で呼ばれる Makefile で clan...
+ bear コマンドがインストールされていない場合は、インスト...
# apt-get install bear
+ bear コマンドの実行(環境によっては "--" が不要な場合が...
$ bear -- make
-- 既に compile_command.json があり、且つクリーンビルドで...
-- ※ Ubuntu20.x の bear コマンドでは、コマンド名と make ...
//=======================================================...
** compiledb を使った compile_commands.json の生成 [#kdb6...
+ インストール
-- compiledb は python で書かれており、 pip でもインスト...
$ pip3 install compiledb
+ 実行
-- コンパイルしながら生成する場合
$ compiledb make
-- コンパイルせずに生成する場合
$ compiledb -n make
//=======================================================...
** cmake を使ったプロジェクトでの compile_commands.json ...
$ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON <ソースコード...
/////////////////////////////////////////////////////////...
* 参考リンク [#ib49a8ea]
- [[Home · Andersbakken/rtags Wiki · GitHub(開発元 githu...
- [[最強のC/C++インデクサー "Rtags" を本気で使う>https://...
- [[Rtags で BitVisor の開発を楽になるか?>https://qiita.c...
終了行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#d598aa76]
#contents();
/////////////////////////////////////////////////////////...
* rtags [#aded69fa]
- rtags は、llvm をバックエンドに使用したタグ検索システム。
- コンパイラのライブラリを使って解析する為、同名の関数や...
- サーバ&クライアントシステムになっている。
-- rtags システムにはコンパイル方法を入力し(直接コンパイ...
-- クライアントからの問い合わせを受けてからサーバが解析を...
- Linux kernel のような巨大な project では、タグ生成の為...
- コメント文字列のような、コンパイルに使われないものにつ...
- このように、cscope や gtags 等の他のタグシステムとは長...
//=======================================================...
** 環境構築(debian パッケージを使用) [#build-env-debian...
+ 必要な関連パッケージをインストールする
# apt-get install rtags
+ コマンド名はオリジナルから若干アレンジされているので注...
|>|~コマンド名 |
|~オリジナル |~debian パッケージ版 |
|rc |rtags-rc |
|rdm |rtags-rdm |
|rp |rp |
-- rtags-rc に関しては、9base パッケージの rc コマンドと...
-- 記載が煩雑になるが、本頁では rc, rdm について、説明文...
//=======================================================...
** 環境構築(自前ビルド) [#build-env-build]
+ 必要な関連パッケージをインストールする
# apt-get install clang libclang-dev cmake
+ rtags をビルドする(rtags がディストリビューションでパ...
++ コードを取得する
$ git clone --recursive https://github.com/Andersbakken/...
++ ビルドする
$ cd rtags
$ git submodule init
$ git submodule update
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
~
+ rtags をインストールする
-- ビルドすると rtags/build/bin に以下の実行形式が生成さ...
$ ls rtags/build/bin
rtags-rc rtags-dm rp
//=======================================================...
** タグを生成する [#u9c384fe]
+ まず、daemon を起動する
$ rtags-dm --daemon
+ タグを生成する方法は2つある
//-------------------------------------------------------...
*** 1. rc コマンドに直接渡す [#p77de85a]
- 実際に compile するときのコマンドを rc に渡す。
$ rtags-rc gcc $(CFLAGS) $(SRCS)
//-------------------------------------------------------...
*** 2. rc -Jコマンドで compile_commands.json を読み込ませ...
- compile_commands.json の生成方法は、[[compile_commands....
- rc -Jコマンドで compile_commands.json を読み込ませる
$ rtags-rc -J <compile_commands.jsonが置かれているディレ...
-- ここでエラーになる場合、compile_commands.json が無意味...
--- 原因としては、ビルド済みの環境で bear コマンドを走ら...
--- 対策としては、make clean してから再度 bear -- make を...
-- compile_commands.json の中でのソースファイル等のパスは...
//=======================================================...
** rtags-rdm の終了 [#ta139a3e]
- rdm を終了するには、 rc にて以下のコマンドを実行する:
$ rtags-rc -q
//=======================================================...
** プロジェクト情報の unload [#w3a904bc]
- rtags サーバ (rdm / rtags-rdm) は、quit しても、それま...
- load したプロジェクト情報を rtags サーバに忘れさせるに...
-- 指定したプロジェクトを unload する。
$ rtags-rc --delete-project [keyword-project-to-be-delet...
--- [keyword-project-to-be-deleted] にマッチする全ての pr...
-- 全ての project 情報を unload する。
$ rtags-rc --clear
//=======================================================...
** current project の切り替え [#x4de7023]
- 複数の project を読み込んでいる時、current project にな...
- そうした場合に、検索対象のコードが属する project を cur...
$ rtags-rc -p <current projectにしたいproject>
-- <current projectにしたいproject> は、rtags-rc -p を引...
//=======================================================...
** トラブルシューティング [#ca4c6252]
//-------------------------------------------------------...
*** "Can't seem to connect to server (/run/user/1000/rdm....
- rtags-rdm のプロセスが存在するが、ソケットが存在しない...
- pgrep で PID を確認し、その PID を指定して強制終了する。
-- 実行例:
$ pgrep -l rtags
19044 rtags-rdm
$ kill -KILL 19044
- 上記の実施後、改めて rtags-rdm を起動し、コンパイル情報...
/////////////////////////////////////////////////////////...
* emacs から rtags を使う [#rtags-emacs]
//=======================================================...
** emacs の設定 [#b2c2d73e]
- ディストリビューションで提供しているパッケージで rtags ...
build/src/rtags.el
- rtags.el の標準のキーバインドは、rtags.el を読み込んだ...
(rtags-enable-standard-keybindings); enable rtags standa...
- submenu-list も、必要なら同様に設定する:
(rtags-submenu-list) ; enable rtags submen...
- init.el の設定例
;;; rtags.el の設定
(when (require 'rtags nil 'noerror)
(when (executable-find "rtags-rc")
(setq rtags-rc-binary-name "rtags-rc")) ; debian ...
(when (executable-find "rtags-rdm")
(setq rtags-rdm-binary-name "rtags-rdm")) ; debian ...
(defun rtags-local-conf ()
(rtags-mode)
(rtags-start-process-unless-running)
(setq rtags-autostart-diagnostics t)
(rtags-diagnostics)
(setq rtags-completions-enabled t)
(rtags-enable-standard-keybindings) ; enable rtags s...
(rtags-submenu-list) ; enable rtags s...
;;; キーバインド:ネットでよく見掛ける設定だが、行末...
; (local-set-key (kbd "M-.") 'rtags-find-symbol-at-p...
; (local-set-key (kbd "M-;") 'rtags-find-symbol) ...
; (local-set-key (kbd "M-@") 'rtags-find-references)...
; (local-set-key (kbd "M-,") 'rtags-location-stack-b...
; (local-set-key (kbd "M-<") 'rtags-location-stack-b...
; (local-set-key (kbd "M->") 'rtags-location-stack-f...
;;; キーバインド:実際にはこちらを使う
;;; xcscope.el に操作感を似せつつ、併用出来るようキ...
(local-set-key (kbd "C-c d d") 'rtags-find-symbol-at...
(local-set-key (kbd "C-c d s") 'rtags-find-symbol)
(local-set-key (kbd "C-c d r") 'rtags-find-all-refer...
(local-set-key (kbd "C-c d c") 'rtags-find-all-funct...
(local-set-key (kbd "C-c d f") 'rtags-find-file)
(local-set-key (kbd "C-c d i") 'rtags-symbol-info)
(local-set-key (kbd "C-c d m") 'rtags-imenu)
(local-set-key (kbd "C-c d t") 'rtags-taglist)
(local-set-key (kbd "C-c d C") 'rtags-print-class-hi...
(local-set-key (kbd "C-c d <") 'rtags-location-stack...
(local-set-key (kbd "C-c d >") 'rtags-location-stack...
(define-key rtags-mode-map "p" 'rtags-previous-match)
(define-key rtags-mode-map "n" 'rtags-next-match)
)
(add-hook 'c-mode-common-hook 'rtags-local-conf)
(add-hook 'c++-mode-common-hook 'rtags-local-conf)
(add-hook 'objc-mode-hook 'rtags-local-conf)
)
-- 上記では、Debian / Ubuntu のパッケージで rc, rdm のコ...
//=======================================================...
** rtags.el の標準キーバインド [#t5a7c8b3]
|~binding |~function |~...
|C-c r ,|rtags-find-references-at-point |...
|C-c r .|rtags-find-symbol-at-point |...
|C-c r /|rtags-find-all-references-at-point |...
|C-c r ;|rtags-find-file |...
|C-c r <|rtags-find-references | ...
|C-c r >|rtags-find-symbol |...
|C-c r A|rtags-find-functions-called-by-this-function |...
|C-c r B|rtags-show-rtags-buffer | ...
|C-c r C|rtags-compile-file | ...
|C-c r D|rtags-diagnostics | ...
|C-c r E|rtags-preprocess-file | ...
|C-c r F|rtags-fixit | ...
|C-c r G|rtags-guess-function-at-point | ...
|C-c r I|rtags-imenu | ...
|C-c r K|rtags-make-member | ...
|C-c r L|rtags-copy-and-print-current-location |...
|C-c r M|rtags-symbol-info |...
|C-c r O|rtags-goto-offset | ...
|C-c r P|rtags-dependency-tree-all | ...
|C-c r R|rtags-rename-symbol | ...
|C-c r S|rtags-display-summary | ...
|C-c r T|rtags-taglist |...
|C-c r U|rtags-display-summary-as-message | ...
|C-c r V|rtags-print-enum-value-at-point |e...
|C-c r X|rtags-fix-fixit-at-point | ...
|C-c r Y|rtags-cycle-through-diagnostics | ...
|C-c r Z|rtags-location-stack-visualize | ...
|C-c r [|rtags-location-stack-back |...
|C-c r ]|rtags-location-stack-forward |...
|C-c r _|rtags-asm-file | ...
|C-c r a|rtags-expand-auto | ...
|C-c r e|rtags-reparse-file | ...
|C-c r h|rtags-print-class-hierarchy |...
|C-c r l|rtags-list-results | ...
|C-c r p|rtags-dependency-tree |...
|C-c r t|rtags-references-tree |...
|C-c r v|rtags-find-virtuals-at-point | ...
//=======================================================...
** 機能(一部のみ) [#saa05fe7]
- 数多く定義されている API のうち、比較的使う機会の多い一...
//-------------------------------------------------------...
*** rtags-find-symbol-at-point : カーソルが置かれたシンボ...
|~カーソルが指しているもの |~ジャンプ先 |~備考 |
|実体やポインタ変数 |定義位置 | |
|型名 |型の定義位置 | |
//-------------------------------------------------------...
*** rtags-print-class-hierarchy : クラス階層構造の表示 [#...
- クラスの型名にカーソルを置いて実行すると、そのクラスの...
- 例
Superclasses:
class TestDataB c++/polymorphism/test_data_b.h:6:7: cl...
class TestDataIF c++/polymorphism/test_data_if.h:4:7...
//-------------------------------------------------------...
*** rtags-find-all-references-at-point : 参照元(=呼び出...
- xcscope の cscope-find-this-symbol と大体同じ。
//-------------------------------------------------------...
*** 検索履歴の移動 [#q15cfd46]
- rtags-location-stack-back
-- 検索する前の位置に戻る
-- 前回検索後からカーソルを移動していた場合、前回検索した...
- rtags-location-stack-forward
-- rtags-location-stack-back で1回以上履歴を戻った後、再...
-- 当然ながら、一度も rtags-location-stack-back を実行し...
//-------------------------------------------------------...
*** rtags-taglist [#o67e241d]
- 全てのシンボルに関する tag の一覧を表示する
/////////////////////////////////////////////////////////...
* Makefile に rtags 用 tag 生成の target を仕込む(おまけ...
- 下記を Makefile の target として仕込み、
$ make rtags
とすれば、tag 生成までの一通りの処理が実行される(但し、 ...
# for rtags:
RTAGS_CMD_RC := /usr/bin/rtags-rc
RTAGS_CMD_RDM := /usr/bin/rtags-rdm
BEAR_CMD := /usr/bin/bear
COMPILE_DB_FILE := compile_commands.json
IS_RTAGS_RDM_STARTED := $(shell ls -1 /run/user/$(shell ...
rtags : rtags-kill-daemon rtags-delete-compile-db clean ...
rtags-kill-daemon :
ifeq ($(IS_RTAGS_RDM_STARTED),1)
pgrep rtags-rdm | xargs kill -KILL;
endif
rtags-delete-compile-db :
$(RMF) $(COMPILE_DB_FILE)
rtags-start-daemon :
$(RTAGS_CMD_RDM) --daemon;
rtags-create-compile-db :
$(BEAR_CMD) -- make;
rtags-load-compile-db :
$(RTAGS_CMD_RC) -J .;
/////////////////////////////////////////////////////////...
* トラブルシューティング [#mb3e0b08]
//=======================================================...
** daemon 起動が SIGABRT (=6) で失敗する [#dcc02d36]
- 失敗時
$ rtags-rdm --daemon
rtags-rdm: ./src/Location.h:275: static void Location::s...
Caught signal 6
/usr/bin/rtags-rdm(+0x72762)[0x5587b57d3762]
/lib/x86_64-linux-gnu/libc.so.6(+0x38d60)[0x7fea6277cd60]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x141)[0x7fea627...
/lib/x86_64-linux-gnu/libc.so.6(abort+0x123)[0x7fea62766...
/lib/x86_64-linux-gnu/libc.so.6(+0x2240f)[0x7fea6276640f]
/lib/x86_64-linux-gnu/libc.so.6(+0x31662)[0x7fea62775662]
/usr/bin/rtags-rdm(_ZN8Location3setERK4Pathj+0x1cb)[0x55...
/usr/bin/rtags-rdm(_ZN7Project11readSourcesERK4PathR14In...
/usr/bin/rtags-rdm(_ZN7Project4initEv+0x23a)[0x5587b58f2...
/usr/bin/rtags-rdm(_ZN6Server10addProjectERK4Path+0x102)...
/usr/bin/rtags-rdm(_ZN6Server4loadEv+0x107a)[0x5587b5806...
/usr/bin/rtags-rdm(_ZN6Server4initERKNS_7OptionsE+0x10d7...
/usr/bin/rtags-rdm(main+0x2734)[0x5587b57d1424]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea)[...
/usr/bin/rtags-rdm(_start+0x2a)[0x5587b57d364a]
- 対処法: --clean-slate (または -C) オプションを使って...
$ rtags-rdm -C
$ rtags-rdm --daemon
/////////////////////////////////////////////////////////...
* バージョン組み合わせメモ [#v824a60e]
- 動作が確認出来た組み合わせは以下の通り:
|>|>|~version |~distribution |~remark |
|~rtags |~rtags.el |~emacs |~|~|
|2.38-3 |2.41.133 |29.1 |Debian 11 (bullseye) |emacs ...
|2.38-3 |2.41.133 |28.2 |Debian 11 (bullseye) |emacs ...
|2.38-3 |2.38.130 |27.1 |Debian 11 (bullseye) |いずれ...
|2.37-1 |2.37.130 |26.3 |Ubuntu 20.04 (focal) |emacs ...
/////////////////////////////////////////////////////////...
* linux kernel に使えるか? [#febdfd95]
- 対象:linux-6.1.1
- compile_command.json 生成
-- bear コマンドを使ったところ、ビルド開始から json 生成...
|~CPU |i7-1165G7 |
|~Memory |32GB |
|~Storage |MZVLB1T0HBLR-000L7 (Samsung) |
-- 指定したオプションでコンパイル対象となっていないファイ...
/////////////////////////////////////////////////////////...
* compile_commands.json の生成方法 [#create_compile_comma...
- compile_commands.json の生成方法には、以下の方法がある
//=======================================================...
** bear を使った compile_commands.json の生成 [#w48bd344]
- &color(red){注:下記の make で呼ばれる Makefile で clan...
+ bear コマンドがインストールされていない場合は、インスト...
# apt-get install bear
+ bear コマンドの実行(環境によっては "--" が不要な場合が...
$ bear -- make
-- 既に compile_command.json があり、且つクリーンビルドで...
-- ※ Ubuntu20.x の bear コマンドでは、コマンド名と make ...
//=======================================================...
** compiledb を使った compile_commands.json の生成 [#kdb6...
+ インストール
-- compiledb は python で書かれており、 pip でもインスト...
$ pip3 install compiledb
+ 実行
-- コンパイルしながら生成する場合
$ compiledb make
-- コンパイルせずに生成する場合
$ compiledb -n make
//=======================================================...
** cmake を使ったプロジェクトでの compile_commands.json ...
$ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON <ソースコード...
/////////////////////////////////////////////////////////...
* 参考リンク [#ib49a8ea]
- [[Home · Andersbakken/rtags Wiki · GitHub(開発元 githu...
- [[最強のC/C++インデクサー "Rtags" を本気で使う>https://...
- [[Rtags で BitVisor の開発を楽になるか?>https://qiita.c...
ページ名: