我可以阻止CLR优化掉调试信息吗?

我为unit testing编写了一个抽象基类,为我们的测试运行设置了足够的环境。 该类将一些运行时环境位公开为属性,其类型因test而异(属性类型是inheritance的具体测试类中指定的类型参数)。

这一切都很好,除了一位同事发现他无法在调试器中查看任何类的属性。 原因是他没有在他的inheritance类中定义字段,并且CLR优化了某些东西,所以调试器无法显示属性。 是否有可能以某种方式在基类中防止这种情况,或者我是否必须告诉每个人他们需要定义至少一个在测试期间某处使用的字段?

编辑:

听起来像一个可能的罪魁祸首应该是优化/调试设置。 也就是说,我正在调试模式下从Visual Studio构建应用程序,我已经仔细检查了所有项目都是为调试版本设置的,并且此解决方案中的所有项目都没有设置Optimize标志。

也许有必要注意我正在使用MSTest和Visual Studio测试运行器。

编辑2:

通过“无法查看属性”我指的是当我在Quickwatch中评估属性并获得红色感叹号和文本“无法评估表达式”错误文本时。 并且为了避免你认为我完全偏离我的怀疑,添加一个在测试初始化​​方法中初始化的实例字段会使问题消失……

编辑3:

检查构建输出。 我注意到使用以下选项调用编译器:

/debug+ /debug:full /optimize- /define:DEBUG,TRACE 

我认为这足以阻止这种情况发生,但是你去了。 🙂

之前我遇到过同样的问题,并且总是由于Debug模式已经以某种方式关闭了。 请尝试检查以下各项:

  1. 解决方案和适当项目的当前构建配置是Debug
  2. 在属性页的“ 构建”选项卡中, 取消选中优化代码”复选框。

如果这一切都正确,那么我建议您将写入的文本粘贴到“ 输出”窗口,这样我们就可以发现问题的任何不寻常原因。

别忘了显而易见的事

确保您没有尝试调试发布版本。 所有这些编译设置都在这些配置后面设置。 调试版本是一个用于调试;-)