调试ASP.Net应用程序 - 跳过没有被击中的线和断点

时间:2013-12-13 16:10:16

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

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

  • 函数内部的断点被忽略,但是如果我在之前设置一个断点该函数被调用,然后f11进入,我可以正常调试该函数。
  • 如果我附加调试器然后添加一个断点,它将添加它(尽管它将被忽略,如上所述),只要代码没有被执行。一旦调用该函数,如果我尝试添加断点,Visual studio会给出错误“无法设置以下断点...公共语言运行库无法设置断点。
  • 虽然调试某些行似乎完全被跳过了。例如,考虑以下功能:

    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;
    }
    

似乎跳过分配给'谓词',值显示为空。然而,稍后添加教育最小值/最大值的行仍然执行但谓词的值仍为空。从那里它直接跳过进入 foreach而不分配到careerIds并且似乎没有在迭代器上调用next。因此,就不会为careerId分配值(因此为0)并抛出错误,因为0不是有效的Id。

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

我已经尝试过了:

  • 清洁液
  • 重建解决方案
  • 手动删除bin文件夹中的所有dll和pdb文件
  • 重新启动visual studio
  • 重新启动
  • 确保“优化代码”已停用
  • 确保多个线程不会同时调用该函数
  • 修改代码文件并确保它获取更改以确保它运行的是最新版本。它是。 (还打开了Debug&gt; Windows&gt; Modules并检查了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:在工具处尝试清除符号缓存&gt;选项&gt;调试&gt;符号

更新5:尝试从头开始重新安装VS2012 - 仍然没有乐趣

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

尝试打开Modules窗口(Debug->Windows->Modules)并查看模块列表。您应该看到与您的项目相关的DLL文件。现在,重要的是Symbol Status列是否显示Symbols Loaded。如果没有,请查看Path列,检查其是否正确。