如果您反汇编 C#,您经常会看到编译器插入的临时变量,其名称如下:
CS$1$0000
但是什么会导致它们出现在调试器的本地/自动窗格中?
我的一位同事正在尝试维护一个使用Rhino ETL编写的工具。他的程序集的符号被调试器报告为正确加载。他可以单步执行代码。但不是在调试器中显示他的变量,而是只显示内部编译器生成的变量。
我建议他尝试使用相同的代码编写一个新的控制台应用程序,并替换调用的虚拟类AbstractOperation
并Row
满足编译器的要求(这些是来自 Rhino ETL 库的类)。当他尝试删除对 Rhino ETL 的所有依赖项时,一切都恢复正常,在调试器中看到他自己的变量。
他还尝试在同一解决方案中从源代码构建 Rhino ETL,但这并没有解决问题。所以显然这不是由于版本不兼容。
他的代码位于迭代器方法中,因此编译器需要对代码进行重大重组。但是迭代器方法通常不会破坏调试器!
override
在这种情况下,如果它是一个迭代器方法并且基类AbstractOperation
来自 Rhino ETL 库,它似乎会破坏调试器。
基类如何对调试器产生这样的影响?