C#/.NET analysis tool to find race conditions/deadlocks C#/.NET analysis tool to find race conditions/deadlocks multithreading multithreading

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


You're probably looking for one of these:


NOTE: This answer is from 2010. As with all recommendations answers, recommendations tend to change over time. There may be other products out there now, CHESS which was a Microsoft Research Labs project may have evolved into a final product or been scrapped altogether. Please take this answer with a grain of salt and conduct new research into which products are suitable now.


Jinx will do this at runtime (not statically) but it may be worth looking at.


I have been experimenting on how to easily track those. I've been working to track some deadlocks, specially on scenarios where many different lock statements are used.

My goal is to detect deadlocks before they happen, e.g. if you have two resources, you know you have to always use them in the same order, otherwise a deadlock might occur.

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

... somewhere else in the app ...

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

In this case I'm using lockObj1 then lockObj2 in one place and using them in the opposite order in another place, this is something you will like to avoid in an applicationOf course, lock statements don't need to be used one after the other like in the example, your complex application might have several complex objects interacting with each other

I have uploaded the code with the test cases herehttps://github.com/glmnet/LockTracer