0

C#を逆アセンブルすると、コンパイラによって次のような名前の一時変数が挿入されることがよくあります。

CS$1$0000

しかし、それらがデバッガーの[ローカル]/[自動]ペインに表示される原因は何でしょうか。

私の同僚は、 RhinoETLを使用して作成されたツールを保守しようとしています。彼のアセンブリのシンボルは、デバッガーによって正しくロードされたものとして報告されます。彼はコードをステップスルーできます。ただし、デバッガーに変数を表示する代わりに、コンパイラーが生成した内部変数のみを表示します。

私は彼に、同じコードを使用して新しいコンソールアプリを作成し、呼び出されたダミークラスを置き換えAbstractOperationRowコンパイラーを満足させることを提案しました(これらはRhino ETLライブラリのクラスです)。彼がそれを試みたとき、Rhino ETLへのすべての依存関係を削除すると、デバッガーで自分の変数を確認するという点で、すべてが正常に戻りました。

彼はまた、同じソリューションでソースからRhino ETLを構築しようとしましたが、それでも問題は解決しませんでした。したがって、バージョンの非互換性が原因ではないようです

彼のコードはイテレータメソッド内にあるため、コンパイラによるコードの大幅な再編成が必要です。しかし、イテレータメソッドは通常デバッガを壊しません!

この場合、それがoverrideイテレータメソッドであり、基本クラスがAbstractOperationRhino ETLライブラリからのものであると、デバッガが破損するようです。

基本クラスはどのようにしてデバッガーにそのような影響を与えることができますか?

4

1 に答える 1

0

どうやらPostSharpも関与していて、ILを書き換えており、PostSharpへの依存関係が削除されると、問題は解消されました。謎が解けた。

于 2009-12-01T10:39:09.613 に答える