0

.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化されました)この例では逆の順序ですが、デバッガーに表示される順序がさまざまな方法でスクランブルされている他の例があります。

さらに一歩進んで、ネットワークスニファを使用してネットワーク上の実際の出力を調べると、指定した順序が正しいように見えるので、デバッガーに問題があるようですが、正しく表示したいと思います。ところで、デバッガーオプションで「変数ウィンドウにオブジェクトの生の構造を表示する」を設定しています前もって感謝します!

4

2 に答える 2

2

デバッガーはメンバーをアルファベット順に表示しています。

これは通常、多くのものが含まれている大きな構造をデバッグする場合に便利です。

于 2013-02-01T15:05:34.840 に答える
1

確かにアルファベット順のようです...

ネットワークスニファが正しく表示している場合は、デバッガーが変数名をアルファベット順に並べて簡単に見つけられるようにすることで、単に「支援」しようとしている可能性があります。

于 2013-02-01T15:05:15.627 に答える