2012-06-21 63 views
2

考慮下面的代碼片斷使用ASM以檢測可能的同步死鎖

synchronized (A.class) { 
    foo(); 
    synchronized (B.class) { 
    bar(); 
    } 
} 

而且其中A和B被交換另一個代碼。這可能會導致死鎖,我試圖用ASM來檢測這個(特別是,我只檢測A,B是否是我知道不應該同步的類,例如Exceptions)。目前,我有一個使用SimpleVerifier的分析器。使用這個,我可以在堆棧頂部獲得BasicValue並獲取它的Type,但在代碼示例中,內部名稱將是java/lang/Class,它不會告訴我它是哪個類。我似乎無法找到一種簡單的方法來查找類所代表的類。任何幫助是極大的讚賞。謝謝!

+0

你在看靜態還是動態分析? – Jochen

回答

2

您將不得不使用ASM的SourceInterpreter來追蹤價值來自哪裏,然後評估自己的價值。

PS:順便說一句,同步在一個類是一個壞主意......

+0

他甚至可能喜歡寫他自己的翻譯器,它在更高層次的抽象層上運行,例如,彙總表達式。 – oldrinb