2009-08-26 11 views
7

¿Existe alguna manera en Visual Studio (2008 si es que importa) de que pueda, en modo de depuración/interrupción, escribir el contenido de una variable en un archivo de texto/XML?Generar una variable de Visual Studio vista en un archivo

El escenario es que tengo un proceso largo en depuración y me he dado cuenta demasiado tarde de que no he registrado suficientes detalles sobre los eventos que el proceso ha estado supervisando, pero afortunadamente todavía hay un historial disponible dentro de una variable en el código.

Podría navegar a través de las decenas de miles de elementos en esta lista, pero no va a persistir una vez que toco detener en la aplicación ... no hay una opción de contexto obvio para esto, pero ¿hay alguna manera, una mejor manera que manual? ¿O no hay esperanza y solo necesito presionar detener, volver a utilizar la función de registro y ejecutar la cosa de nuevo?

Además de tratar de llegar a un punto de interrupción, modificar el código y volver a escribir para crear un mejor registrador, ¿hay alguna manera de no perder esos datos en la memoria?

Respuesta

17

Una forma de hacerlo sería utilizar la ventana inmediata (menú Depurar -> de Windows ->inmediata). En la ventana que aparece, puedes usar el "?" para consultar el valor de una variable.

Suponiendo que la variable de la historia es una cadena permite ver su contenido escribiendo lo siguiente en la ventana inmediata:

?history 

puede copiar y pegar la salida de allí en un archivo de texto o alternativamente pedir Visual Studio para registrar toda la salida de la ventana de comandos. Para hacer este tipo:

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

Log es un alias para Tools.LogCommandWindowOutput y acepta los siguientes parámetros:

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

Consulte el artículo de MSDN Log Command Window Output Command para más información.

Espero que ayude.

+0

muy útil, gracias! – Gaz

+0

Recuerde agregar un espacio entre "?" e "historia" – Ning

2

creo que mi respuesta es más o menos lo mismo que JamesPickrell de, pero desde la ventana Inmediato que también podría hacer algo como esto:

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

Este emitiría el contenido de la "historia" variable a una archivo llamado c: \ temp.txt.

3

Gracias a Richard's answer, esto funciona para mí.

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

Asegúrese de que existe C:\Temp.

El motivo de escribir en una carpeta y no en la raíz C:\ es evitar UnauthorizedAccessException cuando no se ejecuta Visual Studio como administrador.

Cuestiones relacionadas