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 函数

Visual Studio 2017 中的远程调试

OpenCV 3 Visual Studio 2017 调试,调用堆栈没有 .pdb 文件

Rider EAP 和 Visual Studio For Mac 调试