13

関数/プロシージャ/メソッド/クラス全体が使用されているかどうかを判断できるツールはありますか?

知識のある開発者がコードの未使用のフラグメントを追跡するのに役立つツールを見てきましたが (ほとんどは Delphi 以外の言語用です)、ほとんどの場合、学習曲線が急であり、コード フラグメントが使用されているかどうかを判断するためにかなりの掘り下げが必要です。

Delphi のスマート リンカは、最終的な実行可能ファイルのサイズを縮小するためにこれを行うと言われています。残念ながら、スマート リンカに関するわずかな情報は、ハードウェアから選別されたものを取得する方法を示すものではありません。

確かに、スマート リンカが排除しているものを見つけることができたとしても、そのカリングに関しては非常に保守的かもしれません。

4

8 に答える 8

5

不器用でグローバルではありませんが、以下に示すように、マージン内のドットのソース コードを調べることができます。これらは、コードのデッドコードが削除されていないため、ブレークポイントを設定できる行です。

これは、手続きレベルで起こると私は信じています。これをより粗いレベルで判断する方法がわかりません。

代替テキスト

于 2010-11-19T16:29:56.240 に答える
4

このスレッドでは、未使用のユニットの削除について説明し、IcarusPascalAnalyzerなどのツールについて説明します。そのツールはあなたが必要とするすべてとそれ以上を行います。 未使用のユニットをuses句から「自動的に」削除するにはどうすればよいですか?

于 2010-11-19T16:51:59.613 に答える
2

コード カバレッジツールを使用して、未使用のコードを見つけることができます。アプリケーションを実行し、すべての部分を手動で実行するだけです。コード カバレッジ レポートには、変更されていない部分が表示されます。(未使用のコードにはまだ単体テストがある可能性があるため、単体テストでツールを実行しても役に立ちません)。

Delphi 用の無料の(オープン ソース)コード カバレッジ ツールは、こちらから入手できます。実行後、レポートの赤い線を確認してください。これらは到達していない行です。

Delphi コード カバレッジは、詳細な MAP ファイルに基づいてコード カバレッジ レポートを作成する Delphi 用のシンプルなコード カバレッジ ツールです。

ユニットごとに、カバレッジの概要を含む unit.html があり、その後にマークアップされたソースが続きます。緑のラインが隠れ​​ました。赤い線は覆われた線ではありませんでした。他の行にはコードが生成されていません。カバレッジを要約し、生成されたユニット レポートへのリンクを含む CodeCoverage_summary.html ファイルもあります。

おそらく、作成者は将来のバージョンで「デッド コードの検索」機能を追加する可能性があります。

于 2010-11-19T18:53:04.267 に答える
2

また、最も一般的に使用されている商用プロファイラー/カバレッジ ツールである AQTime をhttp://www.automatedqa.comから確認することもできます。

機能に関するビデオは次のとおりです。http://www.automatedqa.com/products/aqtime/screencasts/coverage-profiling/

于 2010-11-19T19:04:38.900 に答える
0

単位については、PascalAnalyzerを使用してください。何度も使用する必要があるかもしれません。

クラスファクトリなどに登録されているオブジェクト/クラスは、完全にコンパイルされるため、手動で再確認する必要があります。これは、コンパイラが実際に使用しているかどうかがわからないためです。いいえ。

メソッドについては、青い点を確認する必要があります。あまり実用的ではないので、別の方法があります(同じトピックを調査したときに言われたことから)。詳細マップファイルを有効にしてフルビルドを行う必要があります。それが完了したら、ソースを比較して、マップファイルにエントリがあるかどうかを確認する必要があります。そうでない場合、コードはコンパイルされません-おそらくデッドコードです(おそらくそれがコンポーネントである場合、その機能を使用していない可能性があります)。

于 2010-11-19T19:54:05.410 に答える
0

たぶん、CodeHealerは未​​使用のコードであなたを助けることができます

CodeHealer はソース コードの詳細な分析を実行し、次の領域の問題を探します。

監査: 未使用または到達不能なコード、識別子としての Delphi ディレクティブ名とキーワードの使用、より高いスコープで同じ名前の他の識別子を隠す識別子などの品質管理規則。 チェック:初期化されていない、または参照されていない識別子、危険な型キャスト、自動型変換、未定義の関数の戻り値、未使用の割り当て値などの潜在的なエラー。 メトリクス:循環的複雑度、オブジェクト間のカップリング (データ抽象化カップリング)、コメント率、クラス数、コード行数などのコード プロパティの定量化。

于 2010-11-19T18:26:49.300 に答える
0

http://www.peganza.com/でツールをチェックして、いくつかのタスクに役立ててください。

Icarus はフリーウェアであり、'uses' 句を分析して、未使用の参照を削除できるようにします。

Pascal Analyzer は、Icarus 機能とその他の多数のツールを含むフル バージョンです。

于 2010-11-19T17:52:26.583 に答える
0

過去に、「アセンブラーの生成」機能を使用して Free Pascal でソースをコンパイルし、ソースで動作するいくつかの単純なフィルター プログラムを作成しました。(このビットは、リンカーの「セクション」粒度を使用してスマートリンクが行われることを知っておくと便利です)

特定のものがスマートリンクアウトされていない理由を洞察できる場合があります (たとえば、初期化で何かによってアクセスされる可能性のあるテーブルに参照があるため)。

もちろん、Delphi は FPC ではありませんが、何を探すべきかのヒントがある場合は、Delphi のコンパイル後に余白のドットを見て、それがスマートリンクされているかどうかを確認します。同様に、特定のコードがスマートリンクされていない (そうでない) 理由が気になる場合は、FPC を使用してアセンブラーにコンパイルされた小さなサンプル プログラムを分析すると、その理由が明らかになります。(たとえば、RTTI テーブルを参照して見つけます)

FPC ルートでは、そのようなテストの候補を検索するための体系的なルートが可能になります。

于 2010-11-19T20:00:17.053 に答える