带锁的C#Visual Studio Debugger UI行为

我在锁中有一段代码:

lock (obj) { //... } 

我还有一个锁定同一个对象的属性。 足够简单的场景。 我的问题是,如果我在我锁定的代码块中放置一个断点,然后检查Visual Studio调试器中的属性,会发生什么? 调试器是否会死锁,直到我在断点后继续执行(或者杀死visual studio / debugging)? 或者调试器是否只显示该属性的任何数据(从UI中获取后台线程中的数据?)

我问的原因是我有一个专门(并且仅)用于调试目的的属性; 我很乐意在这种情况发生时偶尔没有显示数据,但是多次使用糟糕的调试器属性来破坏调试器(和visual studio),我宁愿避免在某些时候阻碍我的调试工作的代码。我正在努力帮助开始!

我计划在某些时候测试这个,当我有更多的时间,但希望能从更好的人那里获得更快的回答。

是的,调试器在进程内运行的单独工作线程上执行监视表达式。 哪个会锁定你的属性getter和block。 调试器使用它5秒,然后声明监视表达式不可用并显示“function评估超时”。

然后调试器变得脾气暴躁,对于被阻塞的线程没什么用,你通常会看到“function评估被禁用,因为之前的function评估超时了。你必须继续执行才能重新启用function评估。” 哪个好建议。

没有调试器会显示对象的属性,即使它在lock()块中。

Lock()对象实际上并不阻止对对象的任何访问 – 它只是创建一个信号量,它将阻止尝试锁定同一对象的任何其他代码,直到释放锁。

我的经验是VS.NET调试器不时会冻结,但它必须有一些死锁检测和调试优化,以避免这些类型的问题。