2010-11-11 31 views
2

搜索特定的try/catch塊想知道如何搜索try/catch塊,它的catch塊中沒有log.Error(ex)。通過搜索,我的意思是使用構建在正則表達式搜索中的Visual Studio。使用RegEx

正則表達式會發現這樣的塊:

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

此塊應該由正則表達式,因爲它包含log.Error跳過:

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

你的意思是你想使用Visual Studio的內置正則表達式搜索?或者你想在一個分析源代碼的C#程序中做到這一點?另外,在'try'或'catch'塊之後是否可以有多對大括號?如果是這樣,你不能用正則表達式來完成。 – 2010-11-11 09:53:19

+0

不要這麼懶惰:) – 2010-11-11 09:59:26

+0

如前所述,如果你有任意的catch塊,正則表達式不能真正幫助你。如果你所有的catch塊都與你的例子完全一樣,那麼就可以完成。但我敢打賭,只需在代碼中搜索「catch」短語,然後手動檢查是否使用您的首選記錄器,您將花費更少的時間和精力。 – Mikael 2010-11-11 10:17:33

回答

4

無法解析基於上下文自由編程語言帶正則表達式的語法。

試想一下,你的catch塊中有一個try-catch塊,另一個try catch塊在它的catch塊中,只有其中一個有log.Error。

1

假設你想這樣做的代碼,我就不會擔心一個正則表達式,我只是搜索的單詞catch,再算上開始括號的數量{後減去任何結局從牙套}計數,當我找到包含log.Error的行時停止,並且如果在計數達到零之前未找到該行,那麼您已經有一個缺少日誌的實例。

+0

但是這需要編寫自定義搜索工具?我不能在Visual Studio內置搜索中完成任務嗎? – 2010-11-11 10:22:26

+0

@Ivan:我誤解了,我認爲那是你以前做過C#的標籤。不過,我以爲你可以編寫一個VS宏來做到這一點(或者,如果你想要先進的話,VS插件),這樣你仍然可以在VS中使用它。 – 2010-11-11 10:32:01