我正在寻找一个bug,如果我可以将我的Locals Window对象的内容转储到一个文件中,这样我就可以将它在Notepad ++中与另一个正常工作的对象记录进行比较,这将非常有用。问题是:我们不确定代码中是否存在错误或记录是否存在差异。
有没有办法将对象/变量保存到磁盘?
我发现了this扩展,但遗憾的是它仅适用于VS 2010,而且我有2012年。
答案 0 :(得分:5)
您可以使用ObjectDumper project on CodePlex。它也可以作为NuGet包使用。
答案 1 :(得分:2)
我参加派对有点晚了但是我创建了一个名为Object Exporter的Visual Studio扩展程序,可以完全满足您的需求。它会将调试窗口中的任何对象(目前仅限于本地窗口)导出为JSON,XML或CSharp对象初始化代码。
扩展可以在这里找到: https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f
博客文章更多信息: http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/
答案 2 :(得分:1)
导出本地扩展程序的sources可由作者下载 http://barad-dur.nl/net/export-locals/所以你应该可以轻松地将它转换为VS2012。
答案 3 :(得分:1)
我在OzCode工作。它是Visual Studio的调试扩展,我们一直致力于将实例导出为未来版本的XML,json或C#代码。
您可以从Visual Studio's marketplace下载早期访问预览。
它是一种商业级解决方案,可以快速导出大量数据。
我建议您尝试一下 - 一旦使用 Export 安装OzCode,只需打开DataTip窗口并选择“导出”即可。
答案 4 :(得分:0)
尝试打开立即窗口并键入对象名称。它将打印出简单的属性及其值。但它不能很好地处理对象的属性。
或者,您可以使用JSON序列化程序对其进行序列化并在调试控制台中将其打印出来。
答案 5 :(得分:0)
我使用Log4Net和ObjectDumper进行了一些实验来转储对象。
查看我的博文:Logging Complete Objects with Log4Net
基本上你创建自己的IObjectRenderer,配置它,然后你可以简单地log.Debug(你的对象)
public class Log4NetObjectLogger : IObjectRenderer
{
public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
{
var ex = obj as Exception;
//if its not an exception, dump it. If it's an exception, log extended details.
if (ex == null)
{
//by default log up to 10 levels deep.
ObjectDumper.Write(obj,10,writer);
}
else
{
while (ex != null)
{
RenderException(ex, writer);
ex = ex.InnerException;
}
}
}
private void RenderException(Exception ex, TextWriter writer)
{
writer.WriteLine(string.Format("Type: {0}", ex.GetType().FullName));
writer.WriteLine(string.Format("Message: {0}", ex.Message));
writer.WriteLine(string.Format("Source: {0}", ex.Source));
writer.WriteLine(string.Format("TargetSite: {0}", ex.TargetSite));
RenderExceptionData(ex, writer);
writer.WriteLine(string.Format("StackTrace: {0}", ex.StackTrace));
}
private void RenderExceptionData(Exception ex, TextWriter writer)
{
foreach (DictionaryEntry entry in ex.Data)
{
writer.WriteLine(string.Format("{0}: {1}", entry.Key, entry.Value));
}
}
}