Visual Studio 2017 中的调试问题

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

在调试模式下启动我的项目时,出现以下错误并且必须停止调试:

Error screen in Visual Studio while debug start

这是错误消息:

评估函数“Microsoft.VisualStudio.Debugger.Runtime.Tracing.Refresh”超时,需要以不安全的方式中止。这可能破坏了目标进程 如果问题经常发生,请考虑禁用“工具”>“选项”, 设置“调试”>“常规”>“启用属性评估和其他隐式函数调用”,或更改代码以禁用此方法的评估。有关执行此操作的信息,请参阅帮助。

visual-studio-2017
3个回答
2
投票

我还在 Visual Studio 2017 版本 15.7.0 中看到了此问题中的错误消息。原海报没有说涉及哪个工作室版本。

我在另一个网站上发现了这个有限的帖子: https://www.devexpress.com/Support/Center/Question/Details/T581002/evaluation-of-service-timed-out-and-needed-to-be-aborted-in-an-unsafe-way

那篇文章是关于版本 17.2.3,但除了升级似乎已经“解决”了问题之外没有其他细节,遗憾的是未提供升级版本。

我从15.7.0升级到15.8.1,情况有所不同。首先,错误消息已更改,其次,对于我来说,我现在可以继续调试并运行我的程序。之前系统状态混乱,无法继续运行/调试,我的程序处于奇怪的挂起状态。

新的错误消息文本: 为了防止在评估函数“Microsoft.VisualStudio.Debugger.Runtime.Tracing.Refresh”时发生不安全中止,允许所有线程运行。这可能改变了进程的状态,并且遇到的任何断点都被跳过。


0
投票

VS2019(版本16.7.6)也有同样的问题。我的问题是,构造函数调用隐式调用了一个 getter,该 getter 依赖于另一个属性,我认为该属性当时尚未创建。改了代码,问题解决了。


0
投票

请注意,如果您尝试从具有属性的对象访问值,这样的属性会创建无限的访问循环,这就是调试时导致应用程序崩溃的原因。在这种情况下,get 返回相同的 Name 属性,this 返回 Name,依此类推:

public String Name {
    get { return this.Name; }
    set { 
        if (value is null) 
            this.name = string.Empty;
        else
            this.name = value;
    } 
}

确保您没有这样的属性,而是可以创建一个私有变量来存储名称

private String name = string.Empty;
public String Name {
    get { return this.name; }
    set { 
        if (value is null) 
            this.name = string.Empty;
        else
            this.name = value;
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.