VS2017 / C#奇怪的调试器行为

时间:2019-12-03 18:51:09

标签: c# visual-studio debugging

在C#项目的调试版本(目标.Net Framework 4.7.2)中,我被怪异的行为所困扰。

  1. 以下代码返回false。
var wHasOvernightShifts = this.ScheduleSegments.Any(
    x => x.SegmentTypeId == eSegmentType.Schedule 
         && !x.IsDeleted 
         && x.ShiftDate == pShiftDate 
         && x.StartTime.Value.DayOfWeek != x.FinishTime.Value.DayOfWeek);

我知道这是错误的答案。当我在Quick Watch中评估RHS(在同一点使用相同数据)时,相同的代码返回true。向后退调试器并重新执行该语句,再次返回false。 (注:所有引用的属性都没有副作用)。

  1. 我还有一个似乎执行但返回null的方法。方法内部的断点永远不会触发。尝试进入该功能的尝试将被忽略。断点表示将不会触发该断点,因为该模块尚未加载。但是,源代码中位于同一模块中的功能正常运行时会高出几行(带有调试功能和预期功能)。

如果我执行清理并重建,则所有操作均会按预期进行。请注意,仅靠重建本身是不够的。

在第2种情况下,执行清理/重建后,该方法将返回一个非空集合,并且内部的断点会起作用,就像步入一样。

似乎编译器的增量部分已损坏,或者执行环境只是忘记了模块已加载。

还有其他人遇到过类似的问题吗?是否有一个简单的解决方案(除了清理/重建)?

n.b。为了解决此问题,我已关闭“启用我的代码”并打开“要求源文件必须与原始版本完全匹配”。

1 个答案:

答案 0 :(得分:1)

自从我更新项目以来已经过去了几周,以确保每个配置都构建在一个单独的目录中。问题似乎已经消失了。

我很确定这是解决问题的方法。