2011-03-21 42 views
10

我這個週末在其中方法1調用方法2,它調用的方法3,它捕獲的異常碰到一個問題,和異常處理方法內1再次呼籲......我要尋找一個遞歸分析工具

M1 - > M2 - > M3 - > M1 ....

一旦問題發生,問題就變得很明顯,而且很容易解決。

有誰知道在.NET應用程序中檢測這樣的問題的工具嗎?

+0

編譯時間(a.ka.靜態)分析是非常難做到,我不認爲有在.NET空間中的任何工具,可以幫助您與 – Steven 2011-03-21 18:32:28

+0

是@Steven。 - 是的,我無法找到關於工具的任何內容......離我最近的是一篇關於它的ACM文章......當我發佈這個問題時,我碰到了我的手指。 – Sam 2011-03-21 18:49:59

+0

你想檢測任意遞歸嗎?或者特別是,通過異常處理程序發生的遞歸? – 2011-08-07 22:48:13

回答

2

Gendarme會捕獲一些(最常見但基本的)遞歸情況。 MS FxCop也有一些(IIRC)。然而,目前沒有規則來覆蓋更復雜的情況,例如:M1-> M2-> M3-> M1 ...

不幸的是,我不知道有任何其他工具可以對.NET進行此類檢測。請分享您發現的任何內容:-)

+0

NDepend。查看http://stackoverflow.com/questions/1683091/how-to-find-recursion-in-your-app – reinierpost 2011-10-03 09:22:09

5

要做到這一點,您需要通過C#應用程序使用C#語義計算的全局調用圖,以及相當於點到點分析的結果,可以說包括它調用的庫。用這樣一個調用圖,你可以列舉其中的週期,那些將成爲候選人。

我不知道你會得到一個工具來爲C#計算這樣的全局調用圖,現成的。

您可以使用簡單的代碼掃描技術來近似此值。對於每種方法M,提取其包含的顯式調用集合作爲標識符I.通常它們將顯示爲看起來像標識符的語法()在此步驟之後,您有M_i→I。您可以將其構建爲(絕對保守的)基本的調用圖,然後計算傳遞閉包,這樣就可以得到一個包含週期的近似調用圖,並且可以進行循環分析,這將通過名稱和其他情況傳遞出來,但它可能足夠好。用於檢測結合的遞歸

+0

不是我一直在尋找的答案(一種工具),而是一個複雜任務的好簡歷(這解釋了一點,缺乏這樣的工具)。謝謝 – poupou 2011-10-02 19:40:11