Zapis do okna wyjściowego programu Visual Studio

Próbuję napisać wiadomość do okna wyjściowego w celu debugowania. Szukałem funkcji typu Java system.out.println(""). Próbowałem Debug.Write, Console.Write, i Trace.Write. Nie daje błędu, ale też niczego nie drukuje.

Opcje"Define debug constant" I "Define TRACE constant" są zaznaczone.

Menu NarzędziaOpcjedebugowanie"przekierowanie całego tekstu okna wyjściowego do okna bezpośredniego" opcja nie jest sprawdzone.

Configuration: Active (Debug)

Uwaga: stworzyłem projekt za pomocą kreatora jako" aplikacja Windows Forms", jeśli dotyczy. Nie mam pojęcia, gdzie szukać.

Author: Peter Mortensen, 2012-02-27

11 answers

Dodaj przestrzeń nazw System.Diagnostics, a następnie możesz użyć Debug.WriteLine(), aby szybko wydrukować wiadomość do okna wyjściowego IDE. Aby uzyskać więcej informacji, zapoznaj się z nimi:

 793
Author: Bhargav Bhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 21:18:03

Zostanie to zapisane w oknie wyjściowym debugowania:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");
 163
Author: veight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 14:47:41
Debug.WriteLine
To jest to, czego szukasz.

Jeśli nie, spróbuj to zrobić:

Menu NarzędziaOpcjedebugowanie → odznacz Wyślij wyjście do natychmiastowego.

 58
Author: Micah Armantrout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-17 19:12:49

Dla mnie działała tylko przestrzeń nazw Trace , a nie Debug:

System.Diagnostics.Trace.WriteLine("message");

Pracuję w projekcie C# pod Visual Studio 2010.

 25
Author: Zac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 21:21:16

Możesz szukać

MessageBox.Show()

Lub

Debug.Writeline()
 15
Author: dansasu11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 21:20:40

The call

System.Diagnostics.Debug.WriteLine("message");

Nie działa podczas pracy z . Net Core (V 1.0 lub 1.1).

Mamy tworzyć i używać loggera z Microsoft.Extensions.Logging, ale ten log pojawia się tylko w dotnecie.wyskakujące okno konsoli exe, nie w oknie wyjściowym Visual Studio.

 10
Author: Paul Gorbas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 21:22:39

Wymaga to zewnętrznego frameworka, a mianowicie Serilog , ale mimo to uważam, że jest tobardzo płynne doświadczenie z uzyskiwaniem danych wyjściowych w jakieś miejsce, które mogę zobaczyć.

Najpierw musisz zainstalować Serilog ' s Trace sink . Po zainstalowaniu musisz skonfigurować logger w następujący sposób:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(możesz ustawić inny minimalny poziom lub ustawić go na wartość konfiguracyjną lub dowolną normalną funkcjonalność Serilog. Możesz także ustawić Logger Trace na określony poziom, aby nadpisać configs, lub jak chcesz to zrobić.)

Następnie po prostu logujesz wiadomości normalnie i pojawiają się w oknie wyjściowym:

Logger.Information("Did stuff!");

To nie wygląda na taką wielką sprawę, więc pozwól mi wyjaśnić kilka dodatkowych korzyści. Największym dla mnie było to, że mogłem jednocześnie logować się zarówno do okna wyjściowego, jak i do konsoli :

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

To dało mi dużą elastyczność w zakresie sposobu, w jaki używałem wyjścia, bez konieczności powielania wszystkich moich połączeń do Console.Write z Debug.Write. Podczas pisania kodu mogłem uruchomić narzędzie wiersza poleceń w Visual Studio bez obawy o utratę danych wyjściowych po jego zakończeniu. Kiedy wdrożyłem go i musiałem coś debugować (i nie miałem dostępnego Visual Studio), wyjście konsoli było łatwo dostępne do mojego użytku. Te same wiadomości mogą być również rejestrowane do pliku (lub innego rodzaju zlewu), gdy jest on uruchomiony jako zaplanowane zadanie.

Najważniejsze jest to, że użycie Serilog do tego celu sprawiło, że naprawdę łatwo wysyłaj wiadomości do wielu miejsc docelowych, zapewniając zawsze łatwy dostęp do danych wyjściowych niezależnie od tego, jak je uruchomiłem.

Wymaga również bardzo minimalnej konfiguracji i kodu.

 5
Author: jpmc26,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-04 22:25:04

To nie jest odpowiedź na pierwotne pytanie. Ale ponieważ znalazłem to pytanie podczas poszukiwania sposobu interaktywnego dumpingu danych obiektowych, pomyślałem, że inni mogą skorzystać z wymieniając tę bardzo przydatną alternatywę.

Ostatecznie użyłem okna poleceń i wpisałem polecenie Debug.Print, Jak pokazano poniżej. To wydrukowało obiekt pamięci w formacie, który można skopiować jako tekst, który jest wszystkim, czego naprawdę potrzebowałem.

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"
 2
Author: djabraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-11 14:55:29
Debug.Print("text here")

Lub

Console.WriteLine("text here")
 2
Author: mikro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-11 02:35:29

W Visual Studio 2015 zadziałało dla mnie:

OutputDebugStringW(L"Write this to Output window in VS14.");

Przeczytaj dokumentację OutputDebugStringW tutaj .

Tutaj wpisz opis obrazka Zauważ, że ta metoda działa tylko wtedy, gdy debugujesz kod (debug mode)

 1
Author: Mona Jalal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-17 19:12:18

Dla celów debugowania, polecenie System.Diagnostics.Debug.WriteLine() nie zostanie skompilowane do wersji release Twojego kodu, chyba że masz debugerów. Zapisuje do wszystkich detektorów śledzenia, które zawierają okno wyjściowe VS podczas pracy w trybie debugowania.

Dla aplikacji konsolowej. Console.WriteLine() będzie działać, ale wyjście nadal będzie generowane w wersji release Twojego pliku binarnego.

Wyjście debugowania powinno również pojawiać się w normalnym oknie wyjściowym podczas debugowania testów; natomiast konsola.WriteLine output nie (ale można je znaleźć w oknie wyjścia testu.)

 1
Author: Chris McCowan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-10 18:34:32