バックグラウンド
ユーザーがいくつかのスタートアップ設定を変更できるように、XML ファイルにシリアル化するクラスがあります。クラスには列挙型があり、デシリアライザーが name または int 値のいずれかを有効として受け入れるようにします。
protected MyClass(SerializationInfo info, StreamingContext context) {
// want to Step Into right here
try {
logLevel = (Logger.Level)info.GetValue("LogLevel", typeof(Logger.Level));
}
catch(Exception) {
logLevel = (Logger.Level)info.GetValue("LogLevel", typeof(Int32));
}
…
XML deserialize() は、'0' や '1' などはその型の有効な値ではないことを訴える例外をスローします。したがって、当然、ステップイン(F11)を介して行をデバッグしようとしますMyClass mc = (MyClass)xmlSerializer.Deserialize(filepath);
期待されるコードに進まないことへのステップイン
しかし、Visual Studio がジャンプする次の行は、MyClass(SerializationInfo, StreamingContext) ではなく、クラスの既定のコンストラクター MyClass() の先頭です !!
そのため、そのコンストラクターを介して F11 を実行し (XML ファイルとは関係のないデフォルト値を割り当て、私が知る限り、まったく呼び出されるべきではありませんでした)、コンストラクターから飛び出すと、以前と同じように例外に到達します。どうやら、私が書いたデシリアライゼーション コードを実行したことがないようです。
デバッグしたいコードの先頭にSystem.Diagnostics.Debugger.Launch()
orを入れてみましたが、Visual Studio 2010 はそれを無視します。.Break()
Visual Studio がトレースできない、またはトレースしないデシリアライゼーション コンストラクターについて何かありますか?