簡體   English   中英

C#/。NET分析工具來查找競爭條件/死鎖

[英]C#/.NET analysis tool to find race conditions/deadlocks

是否有分析.NET代碼並查找競爭條件的工具?

我有一些代碼具有公共靜態屬性,該屬性獲取或創建一個私有靜態字段。 它還有一個公共靜態方法,可將此字段設置為null(...是的,我知道!..)

由於這兩種方法都沒有鎖定,因此可以肯定的是,將來事情會變得非常糟糕。 我需要一個可以遞歸地處理調用這兩種方法之一的工具,並查看是否在另一個線程上產生了任何東西。

我在尋找工具或nDepend SQL腳本(如果可能)。

您可能正在尋找以下之一:


注意 :此答案來自2010年。與所有建議的答案一樣,建議會隨着時間而變化。 現在可能還有其他產品,作為Microsoft Research Labs項目的CHESS可能已經演變為最終產品或完全廢棄了。 請以一小撮鹽來回答這個問題,並進行新的研究,以使其適合現在的產品。

Jinx將在運行時(不是靜態地)執行此操作,但可能值得一看。

我一直在嘗試如何輕松地跟蹤它們。 我一直在努力跟蹤一些死鎖,尤其是在使用許多不同的鎖語句的情況下。

我的目標是在死鎖發生之前進行檢測,例如,如果您有兩個資源,則必須始終以相同的順序使用它們,否則可能會發生死鎖。

lock (lockObj1) 
lock (lockObj2) 
{ 
    // some code
} 

...在應用程序中的其他地方...

lock (lockObj2) 
lock (lockObj1) // <- I expect some "possible deadlock" detection here 
{ 
    // some code
} 

在這種情況下,我將使用lockObj1,然后在一個位置使用lockObj2,然后在另一位置以相反的順序使用它們,這是您在應用程序中要避免的事情,當然,在與示例中的其他情況類似,您的復雜應用程序可能具有多個相互影響的復雜對象

我已經將代碼和測試用例上傳到了這里https://github.com/glmnet/LockTracer

您可能要簽出CHESS

在這里查看答案: 哪些靜態分析工具可用於C#?

一些靜態分析工具可以執行死鎖檢測。

另外,請嘗試使用Microsoft的FxCop

你看過紅門螞蟻嗎? 我不確定它是否可以滿足您的所有需求,但它是以下用途的好產品:

  • 在幾分鍾內確定性能瓶頸
  • 優化.NET應用程序性能
  • 在行級計時下鑽取慢速代碼行
  • 配置文件aspx,ASP.NET,C#代碼和VB.NET應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM