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

Far*_*nha 119 debugging visual-studio-2010 visual-studio

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

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

Ome*_*viv 174

在即时窗口中,键入

?name_of_variable

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

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

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

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

  • 有谁知道如何输出超过100个项目?我在立即窗口中显示前100个后得到这个:<更多...(显示335个项目的前100个.)> (13认同)
  • 如果它可以递归扩展以展示一切,那会更好.它可能是很多文本,但我可能会搜索它在树中更深层的值. (5认同)
  • "直接窗口"究竟是什么意思? (4认同)
  • PS我非常喜欢bugaid的功能.现在下载线索,当它到期时,我开始测量我的眼球将让我的老板为我买它.. :) (3认同)
  • @alex:在Visual Studio中,转到Debug> Windows> Immediate - 它允许您输入要在调试期间评估或执行的表达式 (3认同)
  • 看来 M$ 打破了这一点。在 VS2019 中,复制值或在立即窗口中键入“?variable”会生成一个用省略号缩短的字符串。 (2认同)
  • @lachs 不是直接的,但这帮助我复制了超过 100 个项目的内容:/sf/ask/125002181/ -100 项 (2认同)
  • 其实你不需要一个“?” 在变量名之前。 (2认同)

Bat*_*mer 41

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

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

来源:Visual Studio如何从调试器序列化对象

  • 这应该被投票,以便人们可以更容易地找到它.在找到这个很棒的解决方案之前,我经历了很多类似的SO问题,这使得我可以在长时间运行的程序崩溃之后将一个大的List <List <byte >>转储到xml文本文件中,并且遇到罕见的崩溃问题.只需添加一个:当我第一次运行它时,我收到一个错误:"评估需要一个线程暂时运行.使用Watch窗口执行评估." 刷新监视窗口后,第二次尝试运行该命令成功. (5认同)
  • 如果你有 json 那么你可以执行以下操作:`File.WriteAllText(@"c:\movie.json", JsonConvert.SerializeObject(movie));` (5认同)

PMN*_*PMN 19

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

  • 做到了。这不是一个漂亮的输出,但是可以正常工作。 (2认同)

Efr*_*eto 6

来自/sf/answers/1635346821/的最受欢迎答案:

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

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)
Run Code Online (Sandbox Code Playgroud)

  • 您可以将其添加为监视表达式并从那里复制未转义的 JSON。 (3认同)
  • 惊人的。多谢兄弟! (2认同)

Yev*_*kes 5

Object Dumper是Visual StudioVisual Studio Code的免费开源扩展。

转储为”命令可通过“代码”“立即”窗口中的上下文菜单使用。

它将对象导出到:

  • C#对象初始化代码,
  • JSON,
  • Visual Basic 对象初始化代码,
  • XML,
  • YAML。

我相信与Diff 工具结合使用会有所帮助。

我是这个工具的作者