gpt4 book ai didi

c# - 查找导致 CannotUnloadAppDomainException 的违规线程

转载 作者:行者123 更新时间:2023-11-30 23:20:58 26 4
gpt4 key购买 nike

在我的 C# .Net 4.0 项目中,我使用 AppDomains 加载插件程序集,要求它们工作,然后卸载 AppDomain,这样我就不必将程序集保留在主进程中。

对于一个特定的插件,当我调用 CannotUnloadAppDomainException 时,我得到一个 AppDomain.Unload() 。我发现这很可能是因为插件启动了一个后台线程,该线程在 catchfinally block 中卡住或花费很长时间(~10 秒)。不幸的是,我不知道线程在哪里。

这只发生在客户的机器上,所以我无法使用我的调试器来提供帮助。但是,如果我能找到更有用的东西来写,我可以给他们一个补丁,将更多信息写入日志文件。

我有插件程序集的源代码,我一直在尝试进行一些静态分析并运行一些测试,但它非常大,我没有找到它卡在 catchfinally

我的问题:

  1. 有什么方法可以让我在获得 CannotUnloadAppDomainException 后获得子 AppDomain 中运行的线程及其调用堆栈的列表?

  2. 除了catchfinally block ,还有其他代码段可以抛出这个异常吗?

最佳答案

让客户端运行PerfView要在程序发生时获取程序的 ETW 跟踪,它应该让您获得一些更详细的信息,了解在异常发生的确切时刻正在运行的内容。这是 a set of video tutorials from Channel 9向您展示如何使用它。

关于c# - 查找导致 CannotUnloadAppDomainException 的违规线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536588/

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