10

新しいLinuxホストにemacs24.2.50を再インストールし、 magnarsemacs構成に基づいて新しいdotEmacs構成を開始しました。以前のワークフローでCEDETを使用してある程度の成功を収めたので、CEDETの構成を開始しました。ただし、C++ソースファイルをロードするたびに奇妙な動作が発生します。

[この部分は解決されました]
予想どおり、セマンティックはすべてのインクルードファイルを解析します(初期セットアップ中にセマンティック追加システムインクルード変数で指定されたすべてのファイルを解析します)が、次のようなエラーメッセージが出力 されます。

WARNING: semantic-find-file-noselect called for /usr/include/c++/4.7/vector while in set-auto-mode for /usr/include/c++/4.7/vector. You should call the responsible function into 'mode-local-init-hook'.

上記の例では、エラーはSTLベクトルに対して出力されますが、対応するエラーメッセージは、アクセスしているファイルおよび後続のインクルードに含まれるすべてのファイルに対して出力されます。その結果、終了するのにかなり長い時間がかかり、残念ながら、新しいバッファを開くタイプがあれば、このプロセスが繰り返されます。

[この問題も解決
されました]さらに、タイプの定義を次のようなエラーメッセージをモデレートします

Idle Service Error semantic-idle-local-symbol-highlight-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, (((0) \"IndexMap\"))" Idle Service Error semantic-idle-summary-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, ((\"fXBetween\" 0 nil nil))"

ここで、DEPFETResolutionAnalysis.ccは現在編集中のファイルとバッファーであり、IndexMapfXBetweenは、編集中のファイルに含まれるファイル/編集中のファイルに含まれるファイルで定義されるタイプです。

問題はかなり厄介なので、CEDET/セマンティックのこれ以上の機能はテストしていません。私のセデット設定はここにあります。

編集:アレックスオットの助けを借りて、私はちょっと最初の問題を解決しました。それは私の恐ろしいセデットの初期化によるものでした。CEDETを構成する適切な方法については、彼の最初の回答を参照してください。(有効にすると、ポイントで型の定義をチェックするときだけでなく、永続的に発生します)
にはまだ問題が残っています。 そして、サイトごとの初期化ファイルを無効にする方法の新しい問題があります。 Idle Service Errorglobal-semantic-idle-local-symbol-highlight-mode

EDIT2:semantic-debug-idle-function問題が発生したバッファで実行しましたが、約700kb [sic!]の出力が生成されます。データコンテナに対していくつかの操作を実行しているように見えます。データコンテナの外観からは、解析されたファイルで定義されているすべてのシンボルに関する情報が含まれています。かなり大きなパッケージ(〜20Mbのソースファイル)を解析したので、このテーブルはかなり大きいです。セマンティックはこれほど大きなデータベースを処理できますか、それともこれは不可能であり、私の問題の理由ですか?

EDIT3:すべてのインクルードのコンテンツを削除して再解析することでうまくいきまし~/.semanticdbた。サイトごとのinitファイルを無効にする必要がありますが、これはCEDETに関連していないため、この質問を閉じます(サイトごとのinitファイルに関連する質問はここにあります)。

4

2 に答える 2

6

.h / .hpp / .c / .cppファイルごとに呼び出されるフックではなく、CEDETのロードを1回だけ実行するように、initファイルを変更する必要があります。この構成をベースとして変更できます。詳細については、次の記事を参照してください。

あなたが抱えている問題は、セマンティックがヘッダーファイルを分析しようとしているために発生し、ヘッダーファイルを開こうとすると、その初期化ルーチンが何度も呼び出されます...

于 2012-11-04T18:32:46.210 に答える
3

最初の問題は、AlexOttのホームページに記載されているCEDETを正しく構成することで解決されました。彼の答えはこの最初の問題を解決します。彼の答えで指定された構成ファイルは、素晴らしい構成の素晴らしいスタートです。私は自分のニーズに合わせてCEDETを構成するためにまったく同じものを使用しました。

2番目の問題は、CEDETを1.1からバザール(リポジトリ)バージョンに更新すると解消されました。これについては、こことAlexの記事で説明されています。さらに、ディレクトリのコンテンツを削除する必要が~/.semanticdbあります(セマンティックデータベースが含まれていて、破損していると思います)。

Alex Ottの助けに感謝し、解決策への道のりを通して私に固執してくれました:)

于 2012-11-05T13:34:58.497 に答える