0

I am looking for a tool (may be build time or eclipse plugin) that can help me to identify if I am not logging the Exception trace/message.

We have a legacy application that has try catch block in which a custom error message is logged. The exception is not logged and is not thrown. So, when a problem occurs, there is no stack trace in the log files that would help to debug the issue. An example of this is:

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

I need a tool like Coverity or Checkstyle that can help me to identify all such occurrences in my code base.

Thanks and Regards

4

1 回答 1

0

我希望您能够使用任何可以使用正则表达式搜索文本的工具(例如grep)做得不错。

正则表达式将是这样的:

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

其中 W 代表一些空白识别器,可以识别空白和换行符。

如果程序员与您展示的约定一致,您的模式足够独特,我希望很少有错误命中。

[编辑] OP 表示

我正在寻找我没有执行以下操作的 catch 块 - '+ 异常':

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

我们回到正则表达式作为一个相当不错的 hack。您需要寻找不调用 Log.log("<<....>" 的任何地方,或者如果调用了,则没有以下 "+exception"。这对于没有"not" 运算符,但可能。假设存在 catch 子句(不同的正则表达式测试),并且存在 Log.log 调用,这可能会这样做:

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

最后的检查是看是否有“+”。与此匹配的任何内容都没有“+”。

我们的源代码搜索引擎 (SCSE) 使用语言的词位而不是正则表达式来实现简单的搜索,因此它有一种用语言词位编写的稍微不寻常的查询语言。它还允许更大规模的“否定”;您可以减去两个区域的命中,这非常有用。这意味着以下查询可以解决问题:

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

(减号)从结果。所以最终结果是“不以日志记录步骤开头的捕获子句”。

更复杂的检查需要找到 catch 子句和日志子句,并验证日志子句不会出现在 catch 块中的任何位置。SCSE 自己无法做到这一点。可以使用解析和构建 AST 的更复杂的引擎来确定这一点。如果OP想要进一步阐述,我也知道可以这样做的工具。

于 2013-02-11T10:02:34.087 回答