Jaka jest różnica między Console.WriteLine () a Debug.WriteLine ()?


93

Jaka jest różnica między vs ?Console.WriteLine()Debug.WriteLine()

Odpowiedzi:


106

Console.WriteLine zapisuje w standardowym strumieniu wyjściowym, w trybie debugowania lub wydania. Debug.WriteLine zapisuje do detektorów śledzenia w kolekcji Listeners , ale tylko wtedy, gdy działa w trybie debugowania. Gdy aplikacja jest kompilowana w konfiguracji wydania, elementy Debug nie zostaną wkompilowane w kod.

Jak Debug.WriteLinepisze do wszystkich detektorów śledzenia w kolekcji Listeners , możliwe jest, że może to być wyprowadzane w więcej niż jednym miejscu (okno wyjściowe programu Visual Studio, konsola, plik dziennika, aplikacja innej firmy, która rejestruje odbiornik (uważam, że DebugView robi to ) itp.).


7
Ściśle DebugView monitoruje komunikaty rejestrowane przez natywne wywołanie interfejsu API systemu Windows OutputDebugString(i DebugPrint). DefaultTraceListenerPisze się OutputDebugString, dlatego DebugView widzi wyjście. msdn.microsoft.com/en-us/library/…
MarkJ

41

Console.WriteLine()jest przeznaczony dla programów w trybie konsoli. Przyjemna funkcja procesu hostingu programu Visual Studio sprawia, że ​​jego dane wyjściowe są wyświetlane w oknie danych wyjściowych programu Visual Studio podczas debugowania procesów, które nie mają konsoli. Jest to bardzo przydatne podczas debugowania, ale uważaj, aby usunąć ten kod (lub opakować go #ifdef DEBUG), gdy będziesz gotowy do utworzenia kompilacji wydania. W przeciwnym razie spowoduje to niepotrzebne obciążenie programu. To sprawia, że ​​nie jest idealny do śledzenia debugowania.

Debug.WriteLine()generuje informacje o śledzeniu, jeśli tworzysz z warunkiem DEBUG #defined. Który jest domyślnie włączony w kompilacji debugowania. Miejsce, w którym kończy się dane wyjściowe, można skonfigurować w pliku app.exe.config. Jeśli ta konfiguracja nie zostanie zastąpiona, .NET automatycznie udostępni instancję klasy DefaultTraceListener. Wysyła tekst Debug.WriteLine () z funkcją API systemu Windows OutputDebugString () do debugera. Debuger programu Visual Studio sprawia, że ​​pojawiają się one w oknie danych wyjściowych, podobnie jak Console.WriteLine ().

Wyraźną zaletą Debug.WriteLine () jest to, że nie generuje narzutów w kompilacji wydania, a wywołania są skutecznie usuwane. Nie obsługuje jednak formatowania złożonego, do tego potrzebna jest metoda String.Format (). W przypadku śledzenia debugowania należy wybrać klasę Debug.


18

Jeśli celem używania Console.WriteLine jest wyłącznie debugowanie, lepiej użyj Debug.WriteLine .

Jeśli chcesz pokazać wiadomość użytkownikowi (w aplikacji konsolowej), użyj Console.WriteLine .

Debug.WriteLine służy tylko do debugowania aplikacji. W trybie wydania Twoje instrukcje debugowania będą ignorowane.

Innym zastosowaniem aplikacji konsolowej jest testowanie zestawów prywatnych. Zamiast tradycyjnego podejścia polegającego na tworzeniu pewnego rodzaju wiązki testowej GUI do testowania skompilowanej wersji biblioteki DLL, można po prostu ponownie zbudować bibliotekę DLL jako aplikację konsoli i wejście / wyjście z / do konsoli. Odkryłem, że ta technika jest szybsza niż spędzanie czasu na tworzeniu uprzęży testowej GUI.


6
„Jeśli chcesz pokazać wiadomość swojemu użytkownikowi, użyj console.writeline.” Może to zmylić niektórych ludzi, ponieważ pokaże coś użytkownikowi tylko wtedy, gdy jest wykonywany w aplikacji konsolowej.
Matt Wilko
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.