c# - 调试 ASP.Net 应用程序 - 跳过未命中的行和断点

标签 c# asp.net debugging visual-studio-2012

我在调试 ASP.Net 应用程序时遇到了一个非常奇怪的问题。它似乎发生在某个类中的所有函数中。我怀疑有几个问题都是相关的:

  • 函数内部的断点会被忽略,但如果我在调用该函数之前放置一个断点,然后按 f11 介入,我就可以正常调试该函数。
  • 如果我附加调试器然后添加一个断点,它会添加它(尽管它会像上面那样被忽略),只要代码还没有被执行。调用函数后,如果我尝试添加断点,visual studio 会出现错误“无法设置以下断点...公共(public)语言运行时无法设置断点。
  • 虽然调试某些行似乎被完全跳过。例如考虑下面的函数:

    public GetCareersParametersByCriteriaResponse GetCareersParametersByCriteria(GetCareersParametersByCriteriaRequest request)
    {
        var response = new GetCareersParametersByCriteriaResponse {
           CareersParameters = new List<CareerParametersView>()
        };
        var predicate = PredicateBuilder.True<CareerView>();
    
        if (!request.IncludeExcludeTop20Careers) {
           predicate = predicate.And(c => !c.ExcludeTop20);
        }
        predicate = predicate.And(c =>
                                  c.EducationMinimumLevel <= request.MinimumEducationLevel &&
                                  c.EducationMaximumLevel >= request.MaximumEducationLevel);
        var careerIds = _careerLibrary.Careers.AsQueryable().Where(predicate).Select(c => c.CareerId).Distinct();
        foreach (var careerId in careerIds) { 
            response.CareersParameters.Add(_careerLibrary.CareerParametersLookup[careerId]);
        }
    
        response.IsSuccess = true;
    
        return response;
    }
    

它似乎跳过了对“predicate”的赋值,并且该值显示为 null。然而,后面添加 education min/max 的行仍然执行,但 predicate 的值仍然为空。它从那里直接跳到 foreach,没有分配给 careerIds,似乎也没有在迭代器上调用 move next。结果 careerId 没有被分配一个值(所以有 0)并抛出一个错误,因为 0 不是一个有效的 Id。

注意:即使 0 是无效 ID 并导致抛出“字典中不存在的给定键”异常,该函数仍会继续执行并返回。那时调试器完全消失(不返回调用函数)并且一切似乎都锁定了(即页面永远不会加载等),直到我分离调试器并且它显示蓝屏死机。

我已经尝试过的事情:

  • 清洁液
  • 重建解决方案
  • 手动删除bin文件夹中的所有dll和pdb文件
  • 重新启动 Visual Studio
  • 重新启动
  • 确保禁用“优化代码”
  • 确保多个线程不会同时调用该函数
  • 修改代码文件并确保它接受更改以确保它运行的是最新版本。这是。 (同时打开调试 > Windows > 模块并检查 pdb 上的时间戳 - 它是最新的)
  • 删除位于 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files 的 DLL 的 IIS 副本
  • 清除符号缓存
  • 完全重新安装 VS2012 和所有插件(例如 resharper)

它似乎在安装 VS2012 更新 4 后立即开始发生,但我在网上找不到任何关于更新后此类问题的信息,重新安装 VS 也无济于事,所以这可能是巧合

更新:在调试时收到一条消息,指出源代码与 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files 中的 dll 不同。 .(即代码的 IIS 副本)我想我可能会做些什么。但是在删除那些之后它仍然没有任何区别,所以将其添加到我尝试过的事情列表中

更新 2: 完全重新安装了 VS2012,因为我怀疑更新可能有问题。然而仍然没有喜悦,同样奇怪的行为

更新 3: 经过进一步调查,我似乎对同一项目/程序集中的所有类都遇到了同样奇怪的问题(解决方案中的其他项目都很好),这表明某处存在项目级别设置。接受所有建议:-)

更新 4: 尝试在工具 > 选项 > 调试 > 符号中清除符号缓存

更新 5: 尝试从头开始重新安装 VS2012 - 仍然不开心

最佳答案

最后完全重新格式化并重新安装是唯一解决问题的方法

关于c# - 调试 ASP.Net 应用程序 - 跳过未命中的行和断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20570919/

相关文章:

ios - 如何在不覆盖设备上的生产版本的情况下制作我的应用程序的开发/调试版本

java - IntelliJ 调试器不会在 Maven 项目的断点处暂停

visual-studio - IIS 7 中不提示调试断言

c# - 在 C# 中引用一系列标签

c# - 以下 PLINQ 代码没有改进

ASP.NET 异常处理/日志记录

.net - 您为ASP.NET应用程序创建哪些UML图?

c# - 一种在开放委托(delegate)和封闭委托(delegate)之间执行转换的方法

c# - 多个 sta 线程在 Windows 窗体应用程序中不起作用

c# - 如何发现一个asp.net客户端立即断开连接