18

私は CEDET (最新の CVS) をいくつかの適度に大きなプロジェクト (それぞれ数百 kLOC、大部分は C ですが、一部は C++) で使用しており、システムが数秒間完全に応答しなくなる長い一時停止が時々発生します。ごくまれに、完全に制御不能になり、マッシュアップしC-gてカーソルを移動するか、別のバッファに切り替えて制御を取り戻す必要があります。

私は GNU Global を使用して、作業しているプロジェクトのタグを作成しますが、これはまだ遅い場合があり、特にsemantic-symref-symbol. 場合によっては、(同じプロジェクト内で) すぐにメッセージを見つけても、古い場所にある可能性がありsemantic-ia-fast-jumpますが、エラーが発生することがあります。これは一時的なバグである可能性があり、通常は信頼できます。semantic-ia--fast-jump-helper: Tag SomeFunction has no buffer informationgtags-find-tagsemantic-ia-fast-jump

方法についての提案をいただければ幸いです

  • すべてのセマンティック分析を失うことなく CEDET を抑制します。
  • プロジェクト定義を修正したり、バグ レポートを提出したりできるように、CEDET が制御不能になった原因を突き止めてください。
  • 一部のセマンティック分析が失敗する理由を特定します。
  • セマンティックを取得して、より多くの情報をキャッシュして応答性を高めます。使用したいメモリがたくさんあります。
  • システムディレクトリを含むさまざまな場所にある複数のプロジェクトの GNU グローバルを管理 (作成して最新に保つ)。
  • で構成したプロジェクト間の依存関係を管理しますede-cpp-root-project
  • それぞれ独自の「config.h」とビルド ディレクトリを持つ、複数のビルド構成を持つプロジェクトを管理します。

記事http://alexott.net/en/writings/emacs-devenv/EmacsCedet.htmlにいくつかのヒントがあります。その記事以外のものを探しています。

4

1 に答える 1

20

使用している CEDET ツールは、プロジェクト全体のすべてのシンボルを追跡する Emacs の機能によって制限されています。CEDET/セマンティックが行うことを調整するための良い出発点は、経由semanticdb-find-default-throttleです。プロジェクトがどのように構成されているかがわかっている場合は、ある種の検索を無効にして処理を高速化できます。

CEDET は、メモリをいっぱいにする必要があると思われる多くのファイルを解析します。その場合、カスタマイズsemantic-idle-scheduler-max-buffer-sizeして、大きなファイルの解析semantic-idle-work-parse-neighboring-files-flagを無効にしたり、近くにあるランダムなものの解析を無効にしたり、「semantic-idle-work-update-headers-flag」を使用してヘッダーの解析を無効にしたりできます。最後の 2 つのデフォルトは nil ですが、一部の自動セットアップ機能によって有効になっていることに注意してください。

CEDET/Semantic は大量のデータをメモリにキャッシュし、ソートされた検索テーブルを構築してパフォーマンスを向上させます。ヘッダー ファイルを頻繁に編集していると、その編集によってキャッシュが古くなり、強制的に再構築されます。Emacs を何度も終了して再起動すると、Semantic は大きなデータベース テーブルを再ロードすることになります。

もう 1 つの可能性は、重要semanticdb-persistent-pathなディレクトリのみを一覧表示するように設定することです。これにより、保存されたデータが削減され、リロードされません。必要な場合は、必要に応じて再解析しますが、全体のデータを抑えるのに役立ちます。

semantic--before-fetch-tags-hookさまざまな条件下で nil を返す関数にも使用できます。サイズやネットワーク遅延などの理由で解析に時間がかかるファイルを見つけて、解析しないように設定します。それもまた、いくらかの時間を節約します。

GNU Global を使用することは、作業を高速化するための良い方法です。これをセマンティック symref とともに使用すると、ヒットしたファイルが解析され、出力表示に必要なデータが提供されます。それについてすることはあまりありません。

上記で見つけたエラーについて、それを再現する方法を特定できる場合は、修正できるように cede-devel メーリング リストで共有してください。この種のバグは以前にも発生しており、通常は GNU グローバル タグがバッファ タグへの変換に失敗した場合に発生します。

制御不能な CEDET スピンをデバッグするには、 と を使用 semantic-debug-idle-functionsemantic-debug-idle-work-functionて物事を絞り込みます。いくつかの設定については上記を参照してください。

cedet-gnu-global-create/update-databaseデータベースを更新したり、それをフックに追加したりするために使用できます。それはまだドキュメントに反映されていないと思います。

プロジェクト管理はトリッキーです。ほとんどの組み込みプロジェクトは、小さなものに適しています。カスタム ビルド システムを使用する特に大規模なプロジェクトでは、通常、カスタム EDE プロジェクト タイプが必要です。新しいプロジェクトを作成することはそれほど悪くありません。ede-linux や ede-emacs を見れば、基本的なことがわかります。カスタム プロジェクトでは、関連するすべてのプロジェクトをまとめて、マクロ、インクルード ディレクトリ、コンパイル コマンドなどの機能をオーバーライドできます。仕事用のカスタム プロジェクトも作成する必要がありました。私が働いている場所に固有のものを備えた ede-linux に非常に似ていました。

于 2010-09-28T00:17:50.330 に答える