7


0

.NET 3.5のコードコントラクトがVS10のデバッガを台無しにする

私は最近、多くの手動の事前条件テストとコードコントラクトを使用した例外スローを移行しました。 .NET 4にアップグレードする代わりに、 `Microsoft.Contracts.dll`アセンブリを使用して、.NET 3.5にもう少し固執できるようにしました(これは.NET 3.5と.NET 4の両方で使用されるライブラリです)アセンブリ)。 Visual Studio 2010でコントラクトリライタをセットアップしましたが、コントラクトは正常に機能します。

ただし、この切り替えを行ったので、コントラクトを持つメソッド、特にContractInvariantMethodを持つクラスでデバッガがおかしな動作をすることに気付きました。 実行カーソルは常に強調表示された行に一致するとは限りません。一部のブレークポイントにヒットできず、デバッガーがローカル変数名を認識できず、 `CS $ 1 $ 0000`のようなものを表示する方法があります。 これはデバッグビルドです。

NET 3.5からVS10までの「Microsoft.Contracts.dll」のコードコントラクトの使用に関して既知の問題はありますか? .NET 4のコードコントラクトでも同様の問題が発生しますか?

[Edit] This question lead me to create a bug on Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in-iterator-methods-while-debugging

2 Answer


1


コントラクトの書き換えが意味するものを知っていることを望んでいます。コンパイラがラッチするためのソースコードを持たない、オンザフライで生成される追加コード。 CLRには非常に多くの異なる要素があるため、デバッガーがまったく実行しないか混乱するかなり多くのことがあり、広範な影響を与える完全な言語機能のみがデバッガーの完全なサポートのための予算を得ます。 たとえば、ラムダ式のように。

バグを報告することは正当な理由ではなく、まだ完全に開発されていないアスペクトを使用している場合、何も改善しないと期待すべきではないということではありません。 早期導入者には常にそのようなコストがかかりますが、自慢する権利もあります:-)


0


現在、コードコントラクトはPost条件およびマルチスレッドでは機能しないことに留意してください。 前提条件の書き換えのみを行うように契約を制限します。 システムの多くの問題を解決しました。