Di mana output System.Diagnostics.Debug.Write muncul?


147

Program C # berikut (dibangun dengan csc hello.cs) mencetak hanya Hello via Console!pada konsol dan Hello via OutputDebugStringdi jendela DebugView. Namun, saya tidak dapat melihat salah satu System.Diagnostics.*panggilan. Mengapa demikian?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

Apakah mungkin diperlukan sakelar baris perintah khusus csc?

Saya tidak menggunakan Visual Studio untuk pengembangan saya, ini adalah hal-hal commandline murni.


seperti yang disebutkan di beberapa komentar pada balasan lain, dapat menggunakan Microsoft (SysInternals) DebugView: technet.microsoft.com/en-us/sysinternals/bb896647.aspx
George Birbilis

Jawaban:


77

Seperti yang telah ditunjukkan orang lain, pendengar harus terdaftar untuk membaca aliran ini. Perhatikan juga bahwa Debug.Writehanya akan berfungsi jika DEBUGbendera build disetel, sementara Trace.Writehanya akan berfungsi jika TRACEflag build disetel.

Pengaturan DEBUGdan / atau TRACEflag mudah dilakukan di properti proyek di Visual Studio atau dengan memasok argumen berikut ke csc.exe

/define:DEBUG;TRACE


5
Berguna (tidak mengharapkan itu) bagi saya untuk mengetahui bahwa objek Debug dan Trace menggunakan pendengar jejak yang sama, oleh karena itu, baik Debug.Write dan Trace. Menulis output ke tempat yang sama, hanya saja tergantung dengan syarat mereka mungkin tidak akan dieksekusi
hello_earth

1
dapatkah Anda menguraikan kondisi apa itu? persis situasi apa yang debug. Menulis tidak akan bekerja sama dengan jejak. menulis?
Pacerier

2
ini tidak bekerja untuk saya, saya telah men-debug dan melacak bendera yang diatur dalam vs properti proyek, dan saya menggunakan Debug.WriteLine, baris dijalankan, tetapi tidak ada yang muncul di jendela output, ada yang punya saran lain?
f1wade

114

Sementara debug System.Diagnostics.Debug.WriteLineakan ditampilkan dalam jendela output ( Ctrl+ Alt+ O), Anda juga dapat menambahkan TraceListenerke Debug.Listenerskoleksi untuk menentukan Debug.WriteLinepanggilan untuk output di lokasi lain.

Catatan: Debug.WriteLinepanggilan mungkin tidak ditampilkan di jendela output jika Anda memiliki opsi Visual Studio "Redirect semua Window Output teks ke Jendela Segera" diperiksa di bawah menu AlatPilihanDebuggingUmum . Untuk menampilkan " AlatOpsiDebugging ", centang kotak di sebelah " AlatPilihanTampilkan Semua Pengaturan ".


4
Saya ingin mengonfirmasi bahwa (Ctrl + Alt + O) akan memunculkan jendela output saat debugging di Visual Studio 2012
Ishikawa

45

Anda perlu menambahkan TraceListeneruntuk melihatnya muncul di Konsol.

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

Mereka juga muncul di jendela Visual Studio Output ketika dalam mode Debug.


2
Rupanya DebugView akan menangkap kedua NET Debug.Write () dan Win32 OutputDebugString (): technet.microsoft.com/en-us/sysinternals/bb896647
dlchambers

@ Dlchambers: Saya pikir itu tidak benar. Halaman itu mengklaim tampilan OutputDebugString()dan (kernel)DbgPrint().
Mike C

1
@dlchambers: Saya menarik komentar; Saya menemukan bahwa DebugView dapat menangkap Debug.Write() jika pengaturan Capture-nya termasuk "Global Win32" - yang mengharuskan menjalankannya dalam mode Admin.
Mike C

10

Saat Anda sedang debugging di Visual Studio, tampilkan jendela "Output" (Lihat-> Output). Itu akan ditampilkan di sana.



5

Ketika saya menulis debug.write ("") dalam kode, itu output di "jendela Segera", bukan "Output window".

Kamu bisa mencobanya. Untuk menampilkan jendela "Segera" ( DebugWindowSegera ).


2

Solusi untuk kasus saya adalah:

  1. Klik kanan jendela output;
  2. Periksa 'Output Program'

0

Untuk VB.NET berikut ini berlaku. Anda harus memilih "Debug" DAN pastikan bahwa Anda "Mulai Debugging". Ini dapat dicapai dengan menekan F5.

Juga Console.WriteLine hanya akan menampilkan pesan ketika membangun sebagai "Lepaskan" di jendela Output Anda.

Seperti disebutkan sebelumnya, buka jendela Output dengan ViewOutput DAN pastikan untuk memilih "Build" jika Anda ingin melihat pesan Console.WriteLine atau "Debug" jika Anda ingin melihat pesan Debug.WriteLine atau Trace.WriteLine.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.