在Visual Studio调试模式下复制对象值

时间:2010-05-28 09:46:19

标签: visual-studio visual-studio-2010 debugging

在Visual Studio调试模式下,可以将鼠标悬停在变量上以显示其值,然后右键单击“复制”,“复制表达式”或“复制值”。

如果变量是一个对象而不仅仅是一个基本类型,那么有一个+号来展开和探索该对象。有没有办法将所有这些复制到剪贴板?

12 个答案:

答案 0 :(得分:154)

在即时窗口中,输入

?name_of_variable

这将打印所有,您可以手动将其复制到任何地方,或使用即时窗口的日志记录功能自动将其写入文件。

更新:我假设您在询问如何复制/粘贴值的嵌套结构,以便您可以以文本方式进行搜索,或者将其保存在侧面然后再保存将对象的状态与它进行比较。如果我是对的,您可能需要查看我创建的Visual Studio的商业扩展,名为OzCode,它可以让您通过“搜索”和“比较”功能更轻松地完成这些操作。

更新2 要回答@ ppumkin的问题,或new EAP有新的导出功能,用户可以将变量值导出为Json,XML,Excel或C#代码。

完全披露:我是我在此描述的工具的共同创建者。

答案 1 :(得分:31)

您可以在即时窗口中运行以下代码,它会将对象的序列化XML表示形式导出到xml文件:

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)

来源:Visual Studio how to serialize object from debugger

答案 2 :(得分:24)

答案 3 :(得分:18)

不完全是您所要求的,但您可以为该对象添加监视,并在监视窗口中展开并选择要复制的所有内容,然后将其复制。

答案 4 :(得分:4)

使用attributes to decorate your classes and methods时,您可以在使用DebuggerDisplay attribute进行调试时从对象显示中获取特定值,例如

[DebuggerDisplay("Person - {Name} is {Age} years old")]
public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}

答案 5 :(得分:2)

https://stackoverflow.com/a/23362097/2680660中最受欢迎的答案:

  

如果有运气,您已经在您的appdomain中有了Json.Net。在其中   情况下,将其弹出到“即时”窗口中:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)

答案 6 :(得分:1)

谷歌引导我解决这个8年前的问题,最后我使用ObjectDumper来实现与复制粘贴调试器数据非常相似的功能。这是一件轻而易举的事。

我知道问题具体是来自调试器的信息,但ObjectDumper提供的信息基本相同。我假设谷歌这个问题的人跟我一样,只是需要数据用于调试目的而不关心技术上是否来自调试器。

答案 7 :(得分:1)

我总是使用:

string myJsonString = JsonConvert.SerializeObject(<some object>);

然后我复制了字符串值,不幸的是,该字符串值也复制了反斜杠。

要消除反冲,请转到此处: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

然后在<p id="demo">Visit Microsoft!</p>元素中,将文本替换为您复制的文本。 然后将var res = str.replace("Microsoft", "W3Schools");行替换为

var res = str.replace(/\\/g, '')

运行这些新更改,但不要忘记单击右侧的“尝试”按钮。

现在,您应该拥有json格式的对象的所有文本,您可以将其放入http://jsonformatter.org之类的json格式程序中,或者要创建POCO,现在可以使用http://json2csharp.com/

答案 8 :(得分:1)

我知道我参加聚会有点晚了,但是我编写了一个用于序列化对象的JSON实现(如果您更喜欢JSON输出)。使用Newtonsoft.Json参考。

private static void WriteDebugJSON (dynamic obj, string filePath)
{
    using (StreamWriter d = new StreamWriter(filePath))
    {
        d.Write(JsonConvert.SerializeObject(obj));
    }
}

答案 9 :(得分:0)

如果您有一个列表并且想要找到一个特定的变量: 在立即窗口中,输入

 myList.Any(s => s.ID == 5062);

如果返回true

var myDebugVar = myList.FirstOrDefault(s => s.ID == 5062);
?myDebugVar

答案 10 :(得分:0)

我刚刚在变量上单击鼠标右键,然后选择了 AddWatch ,这将打开由所有值组成的监视窗口。我选择了所有内容并将其粘贴到文本编辑器中,仅此而已。

答案 11 :(得分:0)

有用的提示,我将在以后再次出现此问题时添加自己的偏好。 如果您不介意添加不需要输出文件的扩展名或类似的东西,则可以使用mladen mihajlovic编写的针对Visual Studio的Hex Visualizer扩展名,他从2015年就完成了版本。 通过局部变量窗口中的常规magnifine glass视图对象,可以很好地显示数组。 https://marketplace.visualstudio.com/items?itemName=Mika76.HexVisualizer2019是2019年的版本。