代码之家  ›  专栏  ›  技术社区  ›  jdehaan

.NET:显示对象的存储位置或地址?

  •  1
  • jdehaan  · 技术社区  · 15 年前

    我知道这是个坏主意 总的来说,如果它真的起作用 unsafe 代码。该项目被调整为允许不安全的代码。但是我的尝试没有成功。到目前为止,我的代码尚未编译:

        unsafe static String AddressOf(Object o)
        {
            void* p = &o;
            return String.Format("{0}", new IntPtr(p));
        }
    

    Error: Cannot take the address of, get the size of, or declare a pointer to a managed type ('object')

    新增2010-06-27:

    通过激活配置设置中的选项,可以在VS内部改进调试 Enable Unmanaged Debugging 有没有办法 启用非托管调试 手动工作?

    挣扎了一段时间后,我安装了 Debugging Tools for Windows 这给了我风波。我几年前在驱动程序开发中使用了一个很好的工具。现在它是一个大包裹的一部分。我试图按照说明让SOS.DLL正常工作,但没有成功。我甚至找不到这个DLL。甚至这个解决方案似乎也需要 项目中的标志。。。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Richard Berg    15 年前

    GCHandle handle = GCHandle.Alloc(o, GCHandleType.Pinned);
    IntPtr address = handle.AddrOfPinnedObject();
    

    SOS (Windows调试工具包的一部分)。您&通过这种方式,您的听众实际上将获得一些有价值的技能,而不仅仅是手舞足蹈地谈论CLR实现的细节。