【问题标题】:Inspecting &x in debugger (C#)在调试器中检查 &x (C#)
【发布时间】:2009-10-29 12:29:07
【问题描述】:

在控制台程序中执行此操作:

object x = new string(new char[0]);

如果在 x 赋值后设置断点绑定并调出快速观察窗口,调试器显示 &x 的内容是什么?我期待的是 x 的地址,但看起来我错了?


编辑:我问这个是因为another thread,它指出如果有人这样做

object x = new string(new char[0]);
object y = new string(new char[0]);

x 和 y 将引用同一个对象。当我想检查它时,我尝试使用 & 运算符在调试器中检查这些变量的地址,起​​初,我觉得它们是不同的。但是,在扩展结果之后,二级值确实匹配 - 所以这些似乎是“真实地址”。

【问题讨论】:

  • 哪个调试器?视觉工作室?
  • 好的,我已经添加了visual-studio标签。
  • Woops- 没有看到你的 &x,所以删除了我的答案。对不起。

标签: c# visual-studio debugging


【解决方案1】:

如果我显示 x 我会得到 "" 类型报告为 "object {string}" - 这是我所期望的。

&x 显示0x062fd7f0(在我的例子中),类型报告为“object&*”。展开,给出另一个指针,类型为“object&”。

在第一种情况下,调试器有足够的信息来计算类型并向您展示一些有用的东西。

在第二种情况下,所有调试器都“知道”变量是一个对象,因此只能显示指针(我认为)。

更新

您的更新很有意义。 &x&y 报告的值是指向变量的指针。它们持有的值是指向不可变字符串“”的指针。

【讨论】:

  • 那么,真正的地址好像是展开的那个(object&)?
  • 确实,检查 &x 会给出一个指向地址的指针。 *&x 给出地址值。
【解决方案2】:

你不能这样做,因为内存管理是由 CLR 处理的

【讨论】:

  • 是的,编辑了我的问题以澄清(希望)我想要做什么。
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 2018-12-03
  • 2010-09-11
  • 2014-10-28
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多