在Visual Studio调试模式下,可以将鼠标悬停在变量上以显示其值,然后右键单击“复制”,“复制表达式”或“复制值”。
如果变量是一个对象而不仅仅是一个基本类型,那么有一个+号来展开和探索该对象。有没有办法将所有这些复制到剪贴板?
答案 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)
答案 2 :(得分:24)
最近有一个扩展对象导出器可以方便地执行此操作。
http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/
扩展名:https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f
答案 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)
我知道问题具体是来自调试器的信息,但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年的版本。