7

私のemacsバージョンは23.2.1ですが、次を使用してバックエンドを変更してGTAGSを使用しました。(require 'semantic/db-global) (semanticdb-enable-gnu-global-databases 'c-mode) (semanticdb-enable-gnu-global-databases 'c++-mode) として使用する GTAGS ファイルを生成しようとしましたセマンティックのバックエンド。ただし、C ファイルを開くたびに、セマンティックは GTAGS ファイルを使用せずにファイルを解析しています。

  1. セマンティックの組み込みパーサーの代わりに GTAGS ファイルを使用することは可能ですか? 組み込みのパーサーはあまり正確ではないことがわかりました。

  2. プロジェクト スコープを指定せずに GTAGS ファイルを使用することはできますか? 私の場合、GTAGS ファイルを emacs の標準インクルード パスである /usr/include に配置しようとしました。しかし、セマンティクスはそれを使用していません。

4

1 に答える 1

8

Semantic は、ジャンプやスマート補完などの機能に直接使用するタグを生成するために GTAGS ファイルを使用しません。セマンティック データベースへの GNU グローバル バックエンドは、巨大な名前テーブルとして代わりに GTAGS を使用します。したがって、シンボルを名前で検索する必要がある場合、GTAGS はセマンティックにそれがどこにあるかを伝え、セマンティックはそれらのファイル自体をより直接的に解析して詳細を取得します。

GTAGS が代替パーサーとして直接使用されない理由は、データ型情報、引数の解析、およびローカル コンテキストの解析が除外されているため、GTAGS の情報がセマンティックに必要な種類の操作には不十分であるためです。

/usr/include で gtags を使用するのは興味深いアイデアですが、おそらくあまり使用されないでしょう。Semantic は、すべてのインクルード ファイルを検索するのではなく、コードで実際に使用されているヘッダー ファイルのみを検索します。GNU Global バックエンドは、プロジェクト全体をスキャンしてシンボルまたはシンボル参照を探すためのものです。すべてのインクルードでシンボルを検索したい場合は便利ですが、現時点では Semantic にそのような機能はありません。

ebrowse を使用してやりたいことを実行することは可能ですが、C++ の場合、パーサーが微妙な点で不十分であり、いくつかの問題が発生することがわかりました。

セマンティック パーサーが不正確だと思われる場合は、cedet-devel メーリング リストにバグとして投稿してください。

于 2010-09-27T23:54:57.347 に答える