繁体   English   中英

如何在Linux上调试哪个线程在.NET Core进程中锁定了对象?

[英]How can I debug which thread has an object locked in a .NET Core process on Linux?

我在Linux上运行了一个死锁的.NET Core进程。 我已经附加了lldb,我可以看到Monitor.ReliableEnter上有数百个线程,并且它们似乎都试图锁定同一个对象,但我无法弄清楚哪个线程正在持有它。

通过!SyncBlk命令在Windows上使用windbg这是微不足道的,但据我所知,在Linux上没有相应的东西。 对象的同步块包含持有锁的线程,我可以找到被锁定对象的同步块索引,但我不知道同步块表在内存中的位置。

如何确定哪个线程持有此对象的锁?

以前我没有意识到这样做的任何好方法(除了使用本机调试器和Net Core的源代码手动分析内存)。

好消息是我们刚刚合并PR以恢复!SyncBlk功能。 https://github.com/dotnet/coreclr/pull/20830所以我期待!SyncBlk将重新回到下一个主要的.Net Core版本。 如果你不想等待,你也可以使用master中的每日构建,标准警告每日构建可能会有一些潜伏的bug。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM