Variables 用于识别挡块中问题的工具

Variables 用于识别挡块中问题的工具,variables,static,try-catch,analysis,Variables,Static,Try Catch,Analysis,我正在寻找一个工具(可能是构建时或eclipse插件),它可以帮助我确定我是否没有记录异常跟踪/消息 我们有一个遗留应用程序,它有一个try-catch块,其中记录了一条自定义错误消息。不会记录异常,也不会引发异常。因此,当出现问题时,日志文件中没有帮助调试问题的堆栈跟踪。这方面的一个例子是: try { do something.... } catch (Throwable exception) { Log.log("<<custom message>

我正在寻找一个工具(可能是构建时或eclipse插件),它可以帮助我确定我是否没有记录异常跟踪/消息

我们有一个遗留应用程序,它有一个try-catch块,其中记录了一条自定义错误消息。不会记录异常,也不会引发异常。因此,当出现问题时,日志文件中没有帮助调试问题的堆栈跟踪。这方面的一个例子是:

try {  
 do something....  
  } catch (Throwable exception) {  
    Log.log("<<custom message>>");  
  }
试试{
做点什么。。。。
}捕获(可丢弃异常){
Log.Log(“”);
}
我需要一个像Coverity或Checkstyle这样的工具,它可以帮助我识别代码库中的所有此类事件


感谢并问候

我希望您能够使用任何可以使用正则表达式搜索文本的工具(例如,grep)完成出色的工作

正则表达式应该是这样的:

     "catch\W*\(.*\)\W*{\W*Log\.log" 
其中W代表一些空格识别器,它可以识别空白和换行

你的模式很独特,如果程序员 符合你的惯例

[编辑]操作指示


我正在寻找未执行以下操作的捕捉块-“+异常”:

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

我们的源代码搜索引擎(SCSE)使用该语言的词素而不是正则表达式来实现简单的搜索,因此它有一种用语言词素编写的稍微不寻常的查询语言。它还允许更大规模的“否定”;你可以减去两个区域的点击,这真的很有用。这意味着下面的查询可以做到这一点:

   'catch' '(' I  I ')' '{' I -  I=Log '.' I=log '(' S '+' I ')'
这将查找所有“catch”子句和块的开头(假设它以“Log”开头),并减去与日志习惯用法的任何匹配项。引用的术语是语言原子。I代表“I(identifier)”;它可以是任何标识符(仅为I)或限制为标识符(其中“Log”)的特定正则表达式是一个特别简单的正则表达式)。S代表“S(tring)”,也允许此查询不需要的约束。此查询有两个子查询,一部分位于查找“catch”的减号之前子句和catch body的前缀,减号后面的一部分查找习语OP坚持他想要的。第二个子查询的结果与第一个子查询的结果的任何重叠都会导致重叠查询从结果中“减去”(减号)。因此最终结果是“不以日志步骤开始的catch子句”


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

可能是我无法解释自己。问题不是确定Log.Log语句是否存在。问题是没有记录异常跟踪/消息或没有引发异常。上面的示例说明了这样一种情况,即通过记录自定义消息来终止异常。您特别询问了如何识别所有这些。我知道异常被日志调用杀死。你显然不清楚的是,它正是你想要的。你想找到异常没有被杀死的地方吗?你想在日志发生的所有地方生成跟踪吗?我不确定你有什么困惑。第一行-帮助我找到ide确定我是否没有记录异常跟踪/消息。-明确指定我要查找的内容。因此,您想知道您没有执行日志调用的位置吗?我正在查找未执行以下操作的catch块-“+Exception”:尝试{do something….}catch(Throwable Exception){log.log(“+Exception”);}
  "catch\W*\(.*\)\W*{\W*Log\.log\(\".*\+^[\+]"
   'catch' '(' I  I ')' '{' I -  I=Log '.' I=log '(' S '+' I ')'