为什么Visual Studio 2010 C#调试器显示的顺序与类定义不同?

时间:2013-02-01 14:59:50

标签: c# visual-studio-2010

我们正在构建一个字节缓冲区,以便将.Net Socket Send()方法发送到某些工厂设备,因此字节顺序很重要。但我注意到即使我使用“[StructLayout( LayoutKind.Sequential ”),Visual Studio 2010调试器显示的序列与我指定的顺序不同。例如,

  [StructLayout(LayoutKind.Sequential, Pack = 1)]
  public class K_NEWFILEGET_START
  {
      public K_HEADER Header = new K_HEADER();
      [System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
      public byte[] fileName = new byte[32];
      public globals.INT2_Type crc = new globals.INT2_Type();
  }

然后我做了

 K_NEWFILEGET_START msg = new K_NEWFILEGET_START();

在它显示的调试器中。 。 。

-    msg      {xxxxx.yyy.K_NEWFILEGET_START}        
+    crc      {xxxxx.globals.INT2_Type}     
+    fileName {byte[32]}                        
+    Header   {xxxxx.yyy.K_HEADER}

(专有的东西xxx'ed out)在这个例子中,它的顺序相反,但我有其他的例子,调试器中显示的顺序以不同的方式加扰。

如果我更进一步检查网络上的实际输出,使用网络嗅探器,它似乎是我指定的正确顺序,所以调试器似乎是问题,但我想看看它正确。 BTW我在调试器选项中设置了“在变量窗口中显示对象的原始结构”。  提前致谢!

2 个答案:

答案 0 :(得分:2)

调试器按字母顺序向您显示成员。

在调试大型结构时,通常会更方便。

答案 1 :(得分:1)

当然看起来它按字母顺序排列......

如果网络嗅探器正确显示,那么调试器很可能只是试图通过按字母顺序放置变量名来“帮助”您,这样您就可以更容易地找到它们。