当我实例化一个新对象时,Visual Studio ASP.NET MVC调试器一直处于退出状态

本文关键字:调试器 MVC NET ASP 一直 状态 于退出 Studio 退出 实例化 一个 | 更新日期: 2023-09-27 17:58:16

在过去的12个小时里,我一直在努力理解为什么会发生这种情况。

我在一个ASP.NET MVC(C#)应用程序中工作,在那里我创建了一个抽象类,该类具有所有未来模型类的基本信息。

下面是我做过的代码示例:

namespace TestingModelBind.Models.Home
{
    public abstract class Person 
    {
        public int PersonId {get; set;}
        public string Name { get; set; }
        public string LastName { get; set; }
        private string _personValueHash;
        public string PersonValueHash
        {
            get { return //call function that get the Hash for the Person}
            set { _personValueHash= value; }
        }
        public abstract void GetPerson();
        internal abstract void SavePersonInformation();
        public void SetPerson()
        {
           if (_personValueHash!=PersonValueHash){SavePersonInformation();}
        }
    }

所以我创建了一个抽象类,因为GetPerson和SavePersonInformation的实现取决于个人的类型。这是我在工人类中使用抽象类人员的代码

namespace TestingModelBind.Models.Home
{
    public class Worker: Person
    {
        public bool Consultant { get; set; }
        public string City { get; set; }
        public override void GetPerson()
        {
            // Code to retrieve the Worker Information Based on the PersonId
        }
        internal override void SavePersonInformation()
        {
            // Code to Persist the Worker Information
        }
    }
}

这是我使用最终工人级的控制器

public ActionResult Index(int? id)
{
    Worker dataModel = new Worker(); // This is the line where the Debugger Crash
    if (id!=null)
    {
        dataModel.PersonId = (int) id;
        dataModel.GetPerson();
    }
    return View(dataModel);
}

现在的问题是,在我试图实例化Worker类的所有时间里,Visual Studio中的调试器都崩溃了,并给我一个错误消息:

"调试器无法继续运行过程。进程已终止。"

我确实从IntelliTrace中保存了一个文件,当它到达崩溃时刻时,我得到了这个

"没有可用的源。没有符号为任何调用堆栈帧加载。这个无法显示源代码。Itellitrace时间上下文::函数条目:[未知方法]"

我在这件事上快疯了,从真正的项目开始就一直在阻碍我。

有什么想法吗?非常感谢。

当我实例化一个新对象时,Visual Studio ASP.NET MVC调试器一直处于退出状态

当Visual Studio调试器突然退出并且有问题的进程终止时,问题通常是以下之一

  • CLR内部深处的内存损坏
  • 堆栈溢出

对于您的场景,我认为Stack Overflow的情况更有可能发生。我会在您省略的方法中设置一个断点,然后重新运行该场景。如果是堆栈溢出,您应该看到您的方法被反复无休止地命中。

计算对象哈希的代码。我获取所有的Properties值,创建一个字符串,然后对字符串进行哈希处理(我这样做是为了知道我是否真的需要保存信息或用户刚刚浏览过的信息)。问题是,我使用反射对所有属性进行循环,当您执行这段代码并且使用某种继承时,这将导致问题。