Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 时发生不安全中止,允许所有线程运行

问题描述 投票:0回答:3

我将 Visual Studio 2017 更新到版本 15.8.2。

这次更新后,我在调试时开始遇到这些错误:

以下是错误消息:

Visual Studio 调试错误:为了防止在评估函数 *.toString 时发生不安全中止,允许所有线程运行。这可能改变了进程的状态,并且遇到的任何断点都被跳过。

此错误经常出现,一段时间后 Visual Studio 就会崩溃。

我尝试再次卸载并安装 Visual Studio 并重置首选项,但没有成功。

当我禁用选项:“启用属性评估和其他隐式函数调用”时,当我尝试通过将鼠标移到某些属性上来评估某些属性时,会出现相同的错误。没有它的话调试起来相当困难,在这个构建之前我没有遇到任何问题。

问题与 C#Visual Basic (.NET)相同。

这个问题有解决办法吗?我的团队使用 Visual Studio 2017 版本

15.7.4

处理同一项目没有任何问题
visual-studio visual-studio-2017 visual-studio-debugging
3个回答
33
投票

我添加了相同的错误消息,但函数名称不同:

防止评估函数时不安全中止 “Microsoft.VisualStudio.Debugger.Runtime.Tracing.Refresh”所有线程 被允许运行。这可能改变了进程的状态 并且遇到的任何断点都已被跳过。


这就是我摆脱这个讨厌的错误的方法:
在 Visual Studio 2017 中,转到
工具→选项→调试→常规→选中“使用托管兼容模式”
感谢这篇文章:
https://www.codeart.dk/blog/2018/9/vs2017-debugger-timeout/


2
投票

Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 允许运行的所有线程时发生不安全中止

根据本文档

此问题的一个常见原因是当调试器评估时 一个属性,它只允许被检查的线程执行。所以 如果该属性正在等待其他线程在调试的内部运行 应用程序,并且它是否以 .NET 运行时不等待的方式等待 能够中断,就会出现这个问题。

要解决此问题,您可以尝试以下两种可能的解决方案:

  • 解决方案#1:阻止调试器调用 getter 属性或
  • 解决方案#2:让目标代码要求调试器中止 评估ToString方法

此外,如果上述无法解决该错误,您还可以安装以前的旧版本 Visual Studio 来检查它是否适合您:

https://learn.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017#top

希望这有帮助。


0
投票

就我而言,问题与包含 LINQ 查询的变量有关,该变量在调试期间在“监视”窗口中进行评估。

例如,考虑以下代码片段:

var result = query.Where(x => x.Id < 1000).ToList();

有时,错误可能是由调试和监视窗口的表达式求值之间的交互引起的。通过清除监视窗口,您也许能够防止错误发生。

© www.soinside.com 2019 - 2024. All rights reserved.