【问题标题】:Why does Visual Studio Debugger remove \n in display?为什么 Visual Studio 调试器会在显示中删除 \n?
【发布时间】:2013-03-11 20:59:26
【问题描述】:

我预计以下代码中变量 a 的调试器显示为 {11\n22} 但它是 {1122}:

class A
{
    public string Text;
    public override string ToString()
    {
        return this.Text;
    }
}

A a = new A();
a.Text = "11\n22";

调试器显示在变量窗口中:

display string of the object  "{1122}"    // why not "{11\n22}" ?
a.Text                        "11\n22"
a.ToString()                  "11\n22"

用 VS2012 和 VS2010 测试。我以前从未意识到这一点。有人知道为什么显示字符串省略了 \n 字符吗?

即使添加 [DebuggerDisplay("Text")] 也会得到相同的结果。

【问题讨论】:

  • Windows 换行符是\r\n,而不仅仅是\n
  • 谢谢。更改了问题名称。
  • @Oded 这并不能真正解释为什么调试器在一种情况下显示“11\n12”而在另一种情况下显示“1112”。
  • 可能没有比它是调试器错误更多的解释了。
  • @oded 与问题完全无关。 '\n' 被记录为“换行符”,也就是换行符。

标签: c# visual-studio visual-studio-debugging


【解决方案1】:

尝试固定它,你会看到你需要什么。

【讨论】:

  • 对!有趣的是,悬停省略了\n,而在固定后出现了\n。错误
  • 不会将其视为答案,而是很好地证明它是一个错误。所以会标记这个。感谢您的努力。
【解决方案2】:

似乎 Visual Studio 正在显示 Object.ToString() 删除所有 whitespaces

但是,如果您复制文本并将其粘贴到 Notepad,它会显示带有所有 whitespaces 的字符串。

Visual Studio 似乎是 designed/coded 那样!

【讨论】:

  • 它肯定是这样编码的(不相信是设计的),这就是它有错误的原因。你能说出为什么它在固定时显示 {11\n22} 而在悬停时显示 {1122} 的原因吗?
【解决方案3】:

\n省略 - 它被评估。尝试在字符串中的某处插入\",您将看到帮助窗口中出现双引号。同样,如果您在即时窗口中输入a,您将看到以下内容:

a
{"11
22"}
    Text: "11\"\n\\2\"2"

它似乎只是被省略了,因为您正在查看的帮助窗口将所有内容压缩到一行中。

我想这是被评估的,因为这实际上是对象的 摘要,所以它向您显示的是 a.ToString() 的打印值 - Visual Studio 正在(正确)解释 \n作为换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多