Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 时发生不安全的中止,所有线程都被允许运行
Posted
技术标签:
【中文标题】Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 时发生不安全的中止,所有线程都被允许运行【英文标题】:Visual Studio 2017 Debug Error: To prevent an unsafe abort when evaluating the function *.toString all threads were allowed to run 【发布时间】:2019-02-10 17:31:58 【问题描述】:我将 Visual Studio 2017 更新到版本 15.8.2。
这次更新后,我在调试时开始遇到这些错误:
以下是错误消息:
Visual Studio 调试错误:为了防止在评估函数 *.toString 时发生不安全的中止,所有线程都被允许运行。这可能改变了进程的状态,遇到的任何断点都已被跳过。
此错误经常出现,并且在一段时间后 Visual Studio 崩溃。
我尝试再次卸载并安装 Visual Studio 并重置首选项,但没有成功。
当我禁用选项:“启用属性评估和其他隐式函数调用”时,当我尝试通过将鼠标移到某些属性上来评估它们时,我得到了同样的错误。没有它很难调试,而且在这个构建之前我没有任何问题。
C# 和 Visual Basic (.NET) 的问题是一样的。
这个问题有什么解决办法吗?我的团队使用 Visual Studio 2017 版本 15.7.4
【问题讨论】:
【参考方案1】:Visual Studio 2017 调试错误:在评估函数 *.toString 时防止不安全中止允许运行的所有线程
根据this document:
这个问题的一个常见原因是当调试器评估 一个属性,它只允许被检查的线程执行。所以 如果该属性正在等待其他线程在调试的内部运行 应用程序,如果它以 .NET 运行时没有的方式等待 能打断,就会出现这个问题。
要解决此问题,您可以尝试以下两种可能的解决方案:
解决方案 #1:阻止调试器调用 getter 属性或 解决方案 #2:让目标代码请求调试器中止 评估 ToString 方法此外,如果以上方法不能解决该错误,您还可以安装以前的旧版本 Visual Studio 以检查它是否适合您:
https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017#top
希望这会有所帮助。
【讨论】:
嗨 Leo,我已经尝试了解决方案 1 和 2(请参阅我的帖子)。每个类调试都在最后一次构建中工作。有没有可以删除的IDE缓存? @SorinGeorgeBudescu,你是什么意思“是否有任何可以删除的 IDE 缓存?”是否要删除 VS 缓存?如果是,请查看:matteopozzani.com/visual-studio-cache-cleanup @Leo Liu-MSFT 这在 VS2019 中杀了我,我在以前的版本中从未遇到过。您如何执行上述解决方案 #1 或 #2?【参考方案2】:我添加了相同的错误消息,但函数名称不同:
在评估函数时防止不安全的中止 'Microsoft.VisualStudio.Debugger.Runtime.Tracing.Refresh' 所有线程 被允许运行。这可能改变了进程的状态 并且遇到的任何断点都已被跳过。
这就是我摆脱这个讨厌的错误的方法: 在 Visual Studio 2017 中转到 工具 → 选项 → 调试 → 常规 → 选中“使用托管兼容模式” 感谢这篇文章:https://www.codeart.dk/blog/2018/9/vs2017-debugger-timeout/
【讨论】:
根据微软docs.microsoft.com/en-us/visualstudio/debugger/…,勾选这个选项意味着“切换到旧的调试引擎”。这可能意味着我们正在失去一些新的调试功能。我想知道,我们正在失去什么。 对我来说,启用此功能会导致函数评估超时。 @AlexFainshtein您将失去的一件事是 watch 和 quickwatch 中的 lambda 表达式评估 我不会将此称为答案,因为它是一种解决方法。使用此选项可能会停止正确加载 PDB 文件,从而无法进行调试。 VS 2019 没有这样的菜单!!以上是关于Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 时发生不安全的中止,所有线程都被允许运行的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 时发生不安全的中止,所有线程都被允许运行
远程调试 Azure 网站一个 Visual Studio 2017 项目
无法从 Visual Studio 2017 调试和发布 Azure 函数