gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:28:30 25 4
gpt4 key购买 nike

我有一个在 Linux 上运行的死锁 .NET Core 进程。我附加了 lldb,我可以看到有数百个线程卡在 Monitor.ReliableEnter 上,它们似乎都试图锁定同一个对象,但我无法确定是哪个线程拿着它。

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

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

最佳答案

以前我不知道有什么好方法可以做到这一点(除了使用 native 调试器 + Net Core 源代码手动剖析内存)。

好消息是我们刚刚合并了一个 PR 以恢复 !SyncBlk 功能。 https://github.com/dotnet/coreclr/pull/20830所以我希望 !SyncBlk 在下一个主要的 .Net Core 版本中回归。如果您不想等待,也可以使用 master 的每日构建,但标准警告是每日构建可能会潜伏一些错误。

关于c# - 如何调试哪个线程在 Linux 上的 .NET Core 进程中锁定了对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52937977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com