【问题标题】:debugging with pointers in C#在 C# 中使用指针进行调试
【发布时间】:2009-03-10 06:06:16
【问题描述】:

当我用 C/C++ 编程时,我经常在跟踪中包含指针值。这有助于关联跟踪消息之间的对象。在 C# 中,我没有可以跟踪的可用指针值。可追踪的对象 ID 有什么好的替代品吗??

我不知道如何获取底层内存地址,但即使我这样做也无济于事,因为 GC 可以移动对象。

【问题讨论】:

    标签: c# pointers


    【解决方案1】:

    提示:在 Visual Studio 中,您可以在 locals/watch 窗口中右键单击对象,然后选择“Make Object ID”为对象赋予唯一标记。

    http://blogs.msdn.com/saraford/archive/2008/09/16/did-you-know-how-to-create-an-object-id-to-keep-track-of-your-objects-314.aspx

    【讨论】:

      【解决方案2】:

      添加一个在每次构造函数调用时递增的类变量。将此类变量作为您自己的索引分配给该类。

      class foo
      {
        private static int counter;
        private int instance_counter;
      
        public Foo()
        {
          instance_counter = counter;
          counter++;
        }
      
        public string toString()
        {
          return "Foo "+instance_counter.toString();
        }
      }
      

      可能无法直接编译,我这里没有编译器。

      【讨论】:

      • 它实际上是 ToString 而不是 toString,你需要说 public override public string ToString() 但除此之外它可以工作。不过看起来很麻烦。
      【解决方案3】:

      使用 Object.GetHashCode()。可以从所有对象访问 GetHashCode() 方法,因为 C# 中的每个类都派生自 Object。但是只有在调用 Object.GetHashCode() 并且它的结果以某种方式用于为用户定义的类生成哈希码时,它才保证是唯一的。请注意,这并不是绝对保证您最终可能会为多个对象获得相同的 Hashcode。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 2011-01-28
        • 2013-06-20
        相关资源
        最近更新 更多