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

问题描述 投票:107回答:11

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

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

visual-studio visual-studio-2010 debugging
11个回答
157
投票

在即时窗口中,键入

?name_of_variable

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

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

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

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


0
投票

如果您有一个列表并且想要查找特定变量:在即时窗口中,键入

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

如果返回true

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

0
投票

我刚刚右键单击了变量并选择了AddWatch,它会显示由所有值组成的监视窗口。我选择了全部并将其粘贴在文本编辑器中,这就是全部。


36
投票

您可以在即时窗口中运行以下代码,它将导出到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



18
投票

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


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; }
}

2
投票

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

运气好的话,你已经在appdomain中拥有了Json.Net。在这种情况下,将其弹出到您的立即窗口:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)

1
投票

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

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


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格式化程序中,或创建一个现在可以使用http://json2csharp.com/的POCO


1
投票

我知道我参加派对有点晚了,但是如果你喜欢JSON输出的话,我写了一个用于序列化对象的JSON实现。使用Newtonsoft.Json参考。

private static void WriteDebugJSON (dynamic obj, string filePath)
{
    using (StreamWriter d = new StreamWriter(filePath))
    {
        d.Write(JsonConvert.SerializeObject(obj));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.