2009-08-26 14 views
7

C'è un modo in Visual Studio (2008 se è importante) che posso, in modalità debug/break, scrivere il contenuto di una variabile in un file testo/XML?Emettere una variabile Visual Studio controllata su un file

Lo scenario è che ho un lungo processo in esecuzione in debug e mi sono reso conto troppo tardi che non ho registrato abbastanza dettagli sugli eventi che il processo ha monitorato, ma per fortuna una cronologia è ancora disponibile all'interno di una variabile nel codice.

È possibile eseguire il trascinamento di decine di migliaia di elementi in questo elenco, ma non persisterò una volta premuto Stop sull'applicazione ... non esiste un'opzione di contesto ovvia per questo, ma esiste un modo, un modo migliore del manuale? O non c'è speranza e ho solo bisogno di colpire stop, re-tool della funzione di logging ed eseguire di nuovo la cosa?

Oltre a cercare di raggiungere un punto di interruzione, modificare il codice e riscrivere per creare un registratore migliore, esiste un modo per non perdere i dati in memoria?

risposta

17

Un modo per farlo sarebbe quello di utilizzare la finestra immediata (menu Debug ->di Windows ->immediata). Nella finestra che appare puoi usare il "?" interrogare il valore di una variabile.

Assumendo che la variabile storia è una stringa di visualizzare il contenuto digitando quanto segue nella finestra immediata:

?history 

è possibile copiare e incollare l'uscita da lì in un file di testo o in alternativa chiedere Visual Studio per registra tutto l'output della finestra di comando. Per fare questo tipo:

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

Log è un alias per Tools.LogCommandWindowOutput e accetta i seguenti parametri:

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

Partenza l'articolo di MSDN Log Command Window Output Command per ulteriori informazioni.

Spero che questo aiuti.

+0

molto utile, grazie! – Gaz

+0

Ricordarsi di aggiungere uno spazio tra "?" e "storia" – Ning

2

penso che la mia risposta è più o meno lo stesso di JamesPickrell di, ma dalla finestra immediata si potrebbe anche fare qualcosa di simile:

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

Questo sarebbe uscita il contenuto della variabile "storia" ad un file chiamato c: \ temp.txt.

3

Grazie a Richard's answer, questo funziona per me.

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

Assicurarsi che C:\Temp esiste.

La ragione per scrivere in una cartella e non nella radice C:\ è evitare UnauthorizedAccessException quando non si esegue Visual Studio come amministratore.

Problemi correlati