Apa perbedaan antara Console.WriteLine () vs Debug.WriteLine ()?

93

Apa perbedaan antara vs ?Console.WriteLine()Debug.WriteLine()

Zolomon
sumber

Jawaban:

106

Console.WriteLine menulis ke aliran keluaran standar, baik dalam debug atau rilis. Debug.WriteLine menulis ke trace listener dalam koleksi Listeners , tetapi hanya saat berjalan di debug. Ketika aplikasi dikompilasi dalam konfigurasi rilis, elemen Debug tidak akan dikompilasi ke dalam kode.

Saat Debug.WriteLinemenulis ke semua pendengar jejak dalam koleksi Pendengar , ada kemungkinan bahwa ini bisa menjadi keluaran di lebih dari satu tempat (jendela keluaran Visual Studio, Konsol, file Log, aplikasi pihak ketiga yang mendaftarkan pendengar (Saya percaya DebugView melakukan ini ), dll.).

Sam Holder
sumber
7
DebugView secara ketat memantau pesan yang dicatat melalui panggilan API Windows asli OutputDebugString(dan DebugPrint). The DefaultTraceListenermenulis untuk OutputDebugString, yang mengapa DebugView melihat output. msdn.microsoft.com/en-us/library/…
MarkJ
41

Console.WriteLine()dimaksudkan untuk program mode konsol. Fitur bagus dari proses hosting Visual Studio membuat keluarannya muncul di jendela Keluaran Visual Studio saat debugging untuk proses yang tidak memiliki konsol. Itu sangat berguna saat men-debug, tetapi berhati-hatilah karena Anda harus menghapus kode ini (atau membungkusnya dengan #ifdef DEBUG) saat Anda siap membuat build Rilis. Jika tidak, ini akan menambah biaya tambahan yang tidak perlu ke program Anda. Ini membuatnya kurang dari ideal untuk pelacakan debug.

Debug.WriteLine()menghasilkan informasi pelacakan jika Anda membangun dengan DEBUG bersyarat #defined. Yang aktif secara default di build Debug. Di mana hasil akhirnya dapat dikonfigurasi di file app.exe.config. Jika konfigurasi ini tidak diganti, .NET secara otomatis menyediakan instance kelas DefaultTraceListener. Ini mengirimkan teks Debug.WriteLine () dengan fungsi API Windows OutputDebugString () ke debugger. Debugger Visual Studio membuatnya muncul di jendela Output, seperti Console.WriteLine ().

Keuntungan yang jelas dari Debug.WriteLine () adalah tidak menghasilkan overhead dalam build Rilis, panggilan secara efektif dihapus. Namun itu tidak mendukung pemformatan komposit, Anda memerlukan String.Format () untuk itu. Untuk pelacakan debug, kelas Debug harus menjadi pilihan Anda.

Hans Passant
sumber
18

Jika tujuan Anda menggunakan Console.WriteLine semata-mata untuk debugging, lebih baik Anda menggunakan Debug.WriteLine .

Jika Anda ingin menampilkan pesan kepada pengguna Anda (Dalam aplikasi konsol), Anda akan menggunakan Console.WriteLine .

Debug.WriteLine hanya untuk tujuan men-debug aplikasi Anda. Dalam mode rilis, pernyataan debug Anda akan diabaikan.

Penggunaan lain dari aplikasi konsol adalah untuk menguji rakitan pribadi. Daripada pendekatan tradisional untuk membuat semacam rangkaian pengujian GUI untuk menguji versi terkompilasi dari DLL, Anda dapat dengan mudah membangun kembali DLL sebagai aplikasi konsol dan masukan / keluaran dari / ke konsol. Saya telah menemukan teknik ini lebih cepat daripada menghabiskan waktu membuat harness tes GUI.

Rohwedder
sumber
6
"Jika Anda ingin menampilkan pesan kepada pengguna Anda, Anda akan menggunakan console.writeline." Hal ini dapat membingungkan sebagian orang karena hanya akan menampilkan sesuatu kepada pengguna jika dijalankan dalam aplikasi konsol.
Matt Wilko