Output a watched Visual Studio variable to a file

2020-02-05 04:02发布

Is there a way in Visual Studio (2008 if it matters) that I can, in debug/break mode, write the contents of a variable to a text/XML file?

The scenario is that I have a long process running in debug and I have realised too late that I haven't logged enough detail about the events that the process has been monitoring, but fortunately a history is still available within a variable in the code.

I could trawl through the tens of thousands of items in this list, but it's not going to persist once I hit stop on the application ... there is no obvious context option for this, but is there any way, a better way than manual? Or is there no hope and I just need to hit stop, re-tool the logging function and run the thing again?

Aside from trying to hit a breakpoint, modify the code and re-write to make a better logger, is there a way of not losing that in-memory data?

4条回答
狗以群分
2楼-- · 2020-02-05 04:10

I found useful/demonstrative/shareable to save the variable as a json string to the file. From Immediate Window enter the following:

string jsonedVariable = Newtonsoft.Json.JsonConvert.SerializeObject(VARIABLE);
System.IO.File.WriteAllText(@"C:\FILENAME.json", jsonedVariable);
查看更多
男人必须洒脱
3楼-- · 2020-02-05 04:11

I think that my answer is pretty much the same as JamesPickrell's, but from the Immediate Window you could also do something like this:

My.Computer.FileSystem.WriteAllText("c:\temp.txt",history,True)

This would output the content of the "history" variable to a file called c:\temp.txt.

查看更多
劳资没心,怎么记你
4楼-- · 2020-02-05 04:11

Thanks to Richard's answer, this is working for me.

System.IO.File.WriteAllBytes(@"c:\Temp\temp.txt", myVar);

Make sure that C:\Temp exists.

The reason for writing to a folder and not to the root C:\ is to avoid UnauthorizedAccessException when not running Visual Studio as administrator.

查看更多
姐就是有狂的资本
5楼-- · 2020-02-05 04:14

One way to do it would be to use the immediate window (menu Debug -> Windows -> Immediate). In the window that appears you can use the "?" to query the value of a variable.

Assuming your history variable is a string you view its contents by typing the following in the immediate window:

?history

You could copy and paste the output from there into a text file or alternatively ask Visual Studio to log all command window output. To do this type:

>log "c:\test.log"
?history
>log off

Log is an alias for Tools.LogCommandWindowOutput and accepts the following parameters:

Tools.LogCommandWindowOutput [filename] [/on|/off] [/overwrite]

Check out the MSDN article Log Command Window Output Command for more information.

查看更多
登录 后发表回答