- PR -

デバッガの奇妙な行動

1
投稿者投稿内容
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-02-26 15:01
Welcome to the Twilight-Zone!
コード:
using System;
public class Test1 {
  public static void Main() {
    int j = 1;
    try {
      if (j == 1)
        Console.WriteLine("true");
      else {
        int i = 1 + 1;
        Console.WriteLine("false");
      }
    } catch (Exception) {
      Console.WriteLine("hf");
    } finally {
      Console.WriteLine("final");
    }
  }
}


上記のコードにデバッガでステップインして、ステップ実行を行うと、奇妙な現象に遭遇します。devenv.exe、dbgclr.exe、cordbg.exeのいずれでも同じ現象ですので、CLRのデバッガサポートのバグだと思うのですが...。
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-02-26 21:00
 面白い。確かに妙な動作になります。
 JITが生成したネイティブコードが正確にソースの行と対応していないためのようにも見えますが真相は?
_________________
GUNNM
常連さん
会議室デビュー日: 2002/01/23
投稿数: 30
お住まい・勤務地: 横浜
投稿日時: 2002-03-01 00:05
NothingBut.NETFWさんとは異なるコードですが、
英語版のVS.NET RC2のときに、似たような現象に見舞われました。
そのときの現象は、IFブロックに入っていないのに、ステップ実行すると、ステップが中に入っているように見えるという現象です。

そのときは、複文の括弧を入れないと動作が怪しくなるという結論に達したと思います。もしかしたら、今回のコードもそれではないでしょうか?

私も、IF判別の中が1行のときは括弧を書かないほうなんですが、それ以来、.NETプログラミングでは、必ず括弧を入れています。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-03-01 10:48
引用:

そのときは、複文の括弧を入れないと動作が怪しくなるという結論に達したと思います。もしかしたら、今回のコードもそれではないでしょうか?



違います。それは試しました。

上記コードで何がおきるのかを書いていないので、誤解されたかもしれませんが、デバッガのステップ実行におけるハイライト表示行がおかしいという話です。ハイライトがおかしいだけで、コードは意図どおりに実行されます。
1

スキルアップ/キャリアアップ(JOB@IT)