Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试ASP.Net应用程序-跳过未命中的行和断点_C#_Asp.net_Debugging_Visual Studio 2012 - Fatal编程技术网

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

C# 调试ASP.Net应用程序-跳过未命中的行和断点,c#,asp.net,debugging,visual-studio-2012,C#,Asp.net,Debugging,Visual Studio 2012,调试ASP.Net应用程序时,我遇到了一个非常奇怪的问题。这似乎发生在某个类中的所有函数上。我怀疑有几个问题都是相关的: 函数中的断点会被忽略,但是如果我在调用该函数之前放置一个断点,然后f11介入,我可以正常调试该函数 如果我附加调试器,然后添加一个断点,只要代码没有执行,它就会添加它(尽管如上所述它会被忽略)。调用函数后,如果我尝试添加断点,visual studio会给出一个错误“无法设置以下断点…公共语言运行库无法设置断点。” >P>调试时,部分行似乎完全跳过。例如,考虑以下函数:

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

  • 函数中的断点会被忽略,但是如果我在调用该函数之前放置一个断点,然后f11介入,我可以正常调试该函数
  • 如果我附加调试器,然后添加一个断点,只要代码没有执行,它就会添加它(尽管如上所述它会被忽略)。调用函数后,如果我尝试添加断点,visual studio会给出一个错误“无法设置以下断点…公共语言运行库无法设置断点。”
  • >P>调试时,部分行似乎完全跳过。例如,考虑以下函数:

    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;
    }
    
    公共GetCareerParametersByCriteriaResponse GetCareerParametersByCriteria(GetCareerParametersByCriteriaRequest请求)
    {
    var response=新GetCareerParametersByCriteriaResponse{
    CareerParameters=新列表()
    };
    var predicate=PredicateBuilder.True();
    如果(!request.IncludeExcludeTop20Careers){
    谓词=谓词和(c=>!c.ExcludeTop20);
    }
    谓词=谓词。和(c=>
    c、 EducationMinimumLevel=request.MaximumEducationLevel);
    var careerIds=\u careerLibrary.Careers.AsQueryable().Where(谓词).Select(c=>c.CareerId.Distinct();
    foreach(careerIds中的var careerId){
    response.careerParameters.Add(_careerLibrary.CareerParametersLookup[careerId]);
    }
    response.issucess=true;
    返回响应;
    }
    
它似乎跳过了对“predicate”的赋值,值显示为null。但是后面添加教育最小值/最大值的行仍然执行,但谓词的值仍然为null。从那里它直接跳转到foreach,而不赋值给careerIds,似乎也不调用迭代器上的move next。因此,careerId不是分配了一个值(因此有0)并引发错误,因为0不是有效的Id

注意:即使0是一个无效id并导致抛出“给定密钥不在字典中”异常,该函数仍将继续执行并返回。此时调试器将完全消失(不返回调用函数),并且所有内容似乎都已锁定(即页面从不加载等)直到我拆下调试器,它显示出死亡的黄色屏幕

我已经尝试过的事情:

  • 清洗液
  • 重建方案
  • 手动删除bin文件夹中的所有DLL和pdb文件
  • 重新启动visual studio
  • 重新启动
  • 确保禁用“优化代码”
  • 确保多个线程不会同时调用函数
  • 修改代码文件并确保它拾取更改以确保它运行的是最新版本。它是。(还打开了调试>窗口>模块并检查了pdb上的时间戳-它是最新的)
  • 正在删除位于C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时ASP.NET文件的DLL的IIS副本
  • 清除符号缓存
  • 完全重新安装VS2012和所有插件(如resharper)
在安装VS2012更新4后,它似乎立即开始发生,但在更新后,我无法在网上找到任何关于此类问题的信息,重新安装VS也没有帮助,因此这可能是巧合

更新:在调试时收到一条消息,表明源代码与C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时ASP.NET文件处的dll不同后…(即代码的IIS副本)我想我可能会发现一些东西。但是删除这些东西后,仍然没有任何区别,所以把它们添加到我尝试过的事情列表中

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

更新3:进一步调查后,我似乎发现同一项目/程序集中的所有类都存在相同的奇怪问题(解决方案中的其他项目也可以)。这表明某个地方存在项目级别设置。欢迎所有建议:-)

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


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

尝试打开
模块
窗口
(调试->窗口->模块)
并查看模块列表。您应该会看到与您的项目相关的DLL文件。现在,重要的是
符号状态
列是否显示加载的
符号。如果没有,请查看
路径
列,检查其是否正确。

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

我已检查模块窗口-显示已加载所有相关符号,时间戳与上次构建时间正确对应