【问题标题】:Search for specific try/catch block using RegEx使用 RegEx 搜索特定的 try/catch 块
【发布时间】:2010-11-11 09:38:17
【问题描述】:

想知道如何在其 catch 块中搜索没有 log.Error(ex) 的 try/catch 块。通过搜索,我的意思是使用 Visual Studio 内置的正则表达式搜索。

正则表达式会找到这样的块:

try
{
    CallSomeExceptionalFunction();
}
catch(Exception ex)
{
    CallSomething();
    // missing error handling
}

这个块应该被正则表达式跳过,因为它包含 log.Error:

try
{
    CallSomeExceptionalFunction();
}
catch(Exception ex)
{
    log.Error(ex);
}

【问题讨论】:

  • 您的意思是要使用 Visual Studio 的内置正则表达式搜索?或者您想在分析源代码的 C# 程序中执行此操作?此外,trycatch 块之后是否可以有一对以上的大括号?如果是这样,你不能用正则表达式来做。
  • 如前所述,如果你有任意的 catch 块,正则表达式不能真正帮助你。如果您所有的 catch 块与您的示例中的完全一样,则可以完成。但我敢打赌,您只需在所有代码中搜索“catch”短语,然后手动检查您是否使用首选记录器,您将花费更少的时间和精力。
  • Tim Pietzcker:是的,我想使用 Visual Studio 内置的正则表达式搜索
  • Ahmet Kakıcı:不,我不想偷懒,我不想更有效率。
  • 这是 VB 语法的优势所在,匹配 End Try/End Function 而不是任何旧的 } 使得正则表达式语句和控制结构更容易。 ;)

标签: c# regex visual-studio exception-handling


【解决方案1】:

您不能使用正则表达式基于上下文无关文法来解析编程语言。

想象一下,在你的 catch 块中有一个 try-catch 块,在它的 catch 块中有另一个 try-catch 块,其中只有一个有 log.Error 。

【讨论】:

    【解决方案2】:

    假设您想在代码中执行此操作,我不会担心正则表达式,我只需搜索单词 catch,然后计算 { 之后的起始大括号数并减去任何结束大括号} 从该计数开始,当我找到包含 log.Error 的行时停止,如果在计数达到零之前未找到该行,那么您有一个日志丢失的实例。

    【讨论】:

    • 但这需要编写自定义搜索工具吗?我无法在 Visual Studio 内置搜索中完成?
    • @Ivan:我误会了,我以为这就是你在做的事情,因为你有 C# 作为标签。但是,我认为您可以编写一个 VS 宏来执行此操作(或者如果您想更高级,可以编写一个 VS 插件),这样您仍然可以在 VS 中使用它。
    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2010-12-15
    • 2011-07-09
    • 1970-01-01
    • 2016-05-04
    • 2010-10-31
    相关资源
    最近更新 更多