在Visual Studio调试模式下,可以将鼠标悬停在变量上以显示其值,然后右键单击“复制”,“复制表达式”或“复制值”。
如果变量是一个对象而不仅仅是一个基本类型,那么有一个+符号来展开和探索该对象。有没有办法将所有这些复制到剪贴板?
在即时窗口中,键入
?name_of_variable
这将打印出所有内容,您可以手动将其复制到任何您想要的位置,或使用即时窗口的日志记录功能自动将其写入文件。
更新:我假设您在询问如何复制/粘贴值的嵌套结构,以便您可以以文本方式进行搜索,或者可以将其保存在侧面,然后将对象的状态与之进行比较。如果我是对的,您可能需要查看我创建的Visual Studio的商业扩展,称为OzCode,它可以让您通过“搜索”和“比较”功能更轻松地完成这些操作。
更新2要回答@ ppumkin的问题,或者new EAP有一个新的导出功能,允许用户将变量值导出为Json,XML,Excel或C#代码。
完全披露:我是我在这里描述的工具的共同创建者。
如果您有一个列表并且想要查找特定变量:在即时窗口中,键入
myList.Any(s => s.ID == 5062);
如果返回true
var myDebugVar = myList.FirstOrDefault(s => s.ID == 5062);
?myDebugVar
我刚刚右键单击了变量并选择了AddWatch,它会显示由所有值组成的监视窗口。我选择了全部并将其粘贴在文本编辑器中,这就是全部。
您可以在即时窗口中运行以下代码,它将导出到xml文件的对象的序列化XML表示:
(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)
不完全是您要求的,但您可以为该对象添加监视,并在监视窗口中,展开并选择要复制的所有内容,然后复制它。
通过使用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; }
}
https://stackoverflow.com/a/23362097/2680660最受欢迎的答案:
运气好的话,你已经在appdomain中拥有了Json.Net。在这种情况下,将其弹出到您的立即窗口:
Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)
谷歌引导我解决这个8年前的问题,最后我使用ObjectDumper来实现与复制粘贴调试器数据非常相似的东西。这是一件轻而易举的事。
我知道问题具体涉及调试器的信息,但ObjectDumper提供的信息基本相同。我假设谷歌这个问题的人跟我一样,只是需要数据用于调试目的而不关心技术上是否来自调试器。
我一直用:
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
我知道我参加派对有点晚了,但是如果你喜欢JSON输出的话,我写了一个用于序列化对象的JSON实现。使用Newtonsoft.Json参考。
private static void WriteDebugJSON (dynamic obj, string filePath)
{
using (StreamWriter d = new StreamWriter(filePath))
{
d.Write(JsonConvert.SerializeObject(obj));
}
}