0

例外トレース/メッセージをログに記録していないかどうかを特定するのに役立つツール (ビルド時または Eclipse プラグインの可能性があります) を探しています。

カスタム エラー メッセージがログに記録される try catch ブロックを持つレガシー アプリケーションがあります。例外はログに記録されず、スローされません。そのため、問題が発生した場合、問題のデバッグに役立つスタック トレースがログ ファイルに記録されません。これの例は次のとおりです。

try {  
 do something....  
  } catch (Throwable exception) {  
    Log.log("<<custom message>>");  
  }

コード ベース内でのそのような発生をすべて識別するのに役立つ、Coverity や Checkstyle などのツールが必要です。

感謝と敬意

4

1 に答える 1

0

正規表現を使用してテキストを検索できるツール ( grepなど)を使用して、まともな仕事ができることを期待しています。

正規表現は次のようになります。

     "catch\W*\(.*\)\W*{\W*Log\.log" 

ここで、W は、空白と改行を検出する空白認識エンジンを表します。

あなたのパターンは十分にユニークです。プログラマーがあなたが示した規則と一致していれば、誤ヒットはほとんどないと思います。

[編集] OPが示す

次のことを行っていないキャッチブロックを探しています-「+例外」:

  try { do something.... }
       catch (Throwable exception)
      { Log.log("<<custom message>>" + exception)

かなりまともなハックとして、正規表現に戻ります。Log.log("<<....>" を呼び出していない場所、または呼び出している場合、次の "+exception" がない場所を探す必要があります。 "not" 演算子ですが、可能です。catch 句が存在し (別の正規表現テスト)、Log.log 呼び出しが存在すると仮定すると、おそらく次のようになります。

  "catch\W*\(.*\)\W*{\W*Log\.log\(\".*\+^[\+]"

最後のチェックでは、「+」が存在するかどうかを確認します。これに一致するものには「+」がありません。

私たちのソース コード検索エンジン (SCSE) は、正規表現ではなく言語の語彙素を使用して簡単な検索を可能にするため、言語の語彙素に関して書かれた少し変わったクエリ言語を持っています。また、大規模な「否定」も可能です。2 つの領域でヒットを差し引くことができます。これは非常に便利です。これは、次のクエリでうまくいくことを意味します。

   'catch' '(' I  I ')' '{' I -  I=Log '.' I=log '(' S '+' I ')'

(マイナス記号) 結果から。したがって、最終的な結果は「ロギング ステップで始まらない catch 句」になります。

より高度なチェックでは、catch 句とロギング句を見つけて、ロギング句が catch ブロック内のどこにも発生していないことを確認する必要があります。SCSE だけでこれを行うことはできません。これを判断するには、AST を解析して構築するより高度なエンジンを使用できます。OPがさらに詳しく説明したい場合は、これもできるツールを知っています。

于 2013-02-11T10:02:34.087 に答える