默認情況下NET對死鎖檢測沒有任何的支持一種常用的方法是通過加載調試器來逐個檢測所有的線程來判斷是否產生了死鎖現在圖形化調試工具HawkEye的創造者Corneliu為我們提供了一個選擇他的ACornsDebugging工具可以在無須重新編譯NET程序的情況下對大部分死鎖進行檢測對此Corneliu是這樣描述的
這一工具不要求任何形式的重新編譯
無論是哪種方式的外部依賴
對外部庫的引用
都無須進行代碼修改
也不受到在編碼時使用指定類型的鎖的影響
對於沒有PDB文件的Release版本它也能照常工作
它可以分析正在運行的進程
也可分析運行之後獲取的內存鏡像
它可以檢測涉及多線程的死鎖
並返回詳細的調用棧和鎖的使用信息
它只能檢測到那些正在激活狀態下等待被其它線程占用的鎖而形成的死鎖
它無法檢測到
哲學家就餐問題
這樣的死鎖
或由於定時等待+蘇醒/檢測+鎖混合造成的死鎖
它依賴於一個第三方的CDB
exe(此文件在微軟提供的Windows版免費調試工具包中)
它完全無須安裝
使用一個xcopy命令進行布署
最最重要的一點——它是免費的(它的源碼很快也將發布)
對於那些剛開始接觸並行編程的人Corneliu提供了一個對死鎖的簡要介紹以及對該程序輸出結果的說明
ACornsDebuggingFindDeadlockzip是基於微軟的Debugging Tools for Windows來工作的
From:http://tw.wingwit.com/Article/program/net/201311/15052.html