4

私は .NET プロジェクト (C#) を持っています。私のコードには次のような関数があります。

public void myFunction(string myStr)
{
   myStr = "This is not an empty string";

   if(String.IsNullOrEmpty(myStr))
   {
       DoSomething();
   }
}

アプリケーションを分析して、アクセスできないコード ブロックがあるかどうかを確認したいと考えています。どうすればこれを行うことができますか?

4

3 に答える 3

1

一般的にこれを行うには、すべての制御パスに沿った値のシンボリック分析と、条件が真かどうかを判断するためのブール シンボリック単純化が必要です。例えば:

void bar(...a) {
  ...
  x=2*a;
  if (...)  x=17;
  foo(x)
  ...
}
void foo(int x) {
  if (x<a && !x>5) { // dead code if called from bar ...
  ...

デッド コード行が実際にデッドであることを確認するには、foo へのすべての呼び出しを見つけて、それぞれがこの状態を引き起こすことを確認する必要があります。したがって、グローバル関数ポインター分析が必要なグローバルコールグラフが必要であり、グローバルおよびローカルポイントツー分析が必要です...

これを行う既製のツールは知りません。

プログラム変換システムを使用して、ある程度の労力をかけて構築できます。私たちのDMS ソフトウェア リエンジニアリング ツールキットには、C で使用できる前述の機構がすべて含まれています。このすべての機構はまだ C# で使用できるわけではありませんが、言語にとらわれない方法で実装されているため、C# に到達するのは大変ですが、実用的ではありません。

于 2012-05-28T16:12:28.430 に答える
1

ReSharperを使用して、コードをより効率的にします。その機能の 1 つで使用できないコード領域をチェックしています。

于 2012-05-28T14:08:34.233 に答える
-1

開発中にコード品質分析を実行できるReSharperなどのツールを使用することをお勧めします。「コードはヒューリスティックに到達できません」などの警告が表示されます

于 2012-05-28T14:09:09.780 に答える