2009-08-26 25 views
7

Czy jest jakiś sposób w Visual Studio (2008, jeśli to ma znaczenie), że mogę, w trybie debugowania/przerwania, napisać zawartość zmiennej do pliku tekstowego/XML?Przesłanie obserwowanej zmiennej Visual Studio do pliku

Scenariusz jest taki, że mam długi proces uruchomiony w debugowaniu i spostrzegłem zbyt późno, że nie zarejestrowałem wystarczająco dużo szczegółów na temat zdarzeń, które proces monitorował, ale na szczęście historia jest nadal dostępna w zmiennej w kodzie.

Mogę przeszukiwać dziesiątki tysięcy pozycji z tej listy, ale to nie będzie trwało, gdy zatrzymam się na aplikacji ... nie ma tu żadnej oczywistej opcji kontekstowej, ale czy istnieje jakiś sposób, lepszy sposób niż manualny? Czy nie ma nadziei i po prostu muszę zatrzymać, ponownie zaprogramować funkcję rejestrowania i uruchomić ponownie?

Oprócz próby trafienia w punkt przerwania, zmodyfikuj kod i ponownie przeprowadź zapis, aby uzyskać lepszy rejestrator, czy istnieje sposób na utratę danych zapisanych w pamięci?

Odpowiedz

17

Jednym ze sposobów byłoby użyć natychmiastowe okno (menu Debug ->Okna ->Natychmiastowe). W oknie, które się pojawi, możesz użyć "?" zapytać o wartość zmiennej.

Zakładając zmienną historia jest ciągiem przeglądanie jego zawartości, wpisując w oknie Immediate:

?history 

Można skopiować i wkleić wyjście stamtąd do pliku tekstowego lub alternatywnie poprosić Visual Studio zaloguj wszystkie dane wyjściowe okna poleceń. Aby to zrobić, wpisz:

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

Log jest aliasem dla Tools.LogCommandWindowOutput i przyjmuje następujące parametry:

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

Zapoznaj się z artykułem MSDN Log Command Window Output Command aby uzyskać więcej informacji.

Mam nadzieję, że to pomaga.

+0

bardzo pomocne, dzięki! – Gaz

+0

Pamiętaj, aby dodać spację pomiędzy znakami "?" i "historia" – Ning

2

Myślę, że moja odpowiedź jest prawie taka sama jak JamesPickrell, ale z okna Immediate można też zrobić coś takiego:

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

To byłoby wyjście zawartość zmiennej „historii” do plik o nazwie c: \ temp.txt.

3

Dzięki Richard's answer to działa dla mnie.

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

Upewnij się, że C:\Temp istnieje.

Powodem zapisywania w folderze, a nie w katalogu głównym C:\ jest uniknięcie sytuacji, w której UnauthorizedAccessException nie działa z programem Visual Studio jako administrator.

Powiązane problemy