1

バックグラウンド

ユーザーがいくつかのスタートアップ設定を変更できるように、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 がトレースできない、またはトレースしないデシリアライゼーション コンストラクターについて何かありますか?

4

0 に答える 0