System.Diagnostics.Debug.Write çıktısı nerede görünüyor?


150

Aşağıdaki C # programı (ile oluşturulmuş csc hello.cs) yalnızca Hello via Console!konsolda ve Hello via OutputDebugStringDebugView penceresinde yazdırılır . Ancak, System.Diagnostics.*aramaların ikisini de göremiyorum . Neden?

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" );
    }
}

Gerekli olan bazı özel komut satırı anahtarları olabilir cscmi?

Geliştirmelerimden herhangi biri için Visual Studio kullanmıyorum, bu tamamen komut satırı işi.


Başka bir cevapta bazı eleştirilerimizi belirtildiği gibi, Microsoft'un (SysInternals) DebugView kullanabilirsiniz: technet.microsoft.com/en-us/sysinternals/bb896647.aspx
George Birbilis

Yanıtlar:


77

Başkalarının da belirttiği gibi, bu akışları okuyabilmek için dinleyicilerin kaydedilmesi gerekir. Ayrıca, Debug.Writebunun yalnızca DEBUGyapı bayrağı ayarlandığında Trace.Writeçalışacağını , ancak yalnızca yapı bayrağı ayarlandığında çalışacağını unutmayın TRACE.

DEBUGVe / veya TRACEbayrakların ayarlanması, Visual Studio'daki proje özelliklerinde veya csc.exe'ye aşağıdaki bağımsız değişkenler sağlanarak kolayca yapılır

/define:DEBUG;TRACE


5
Debug ve Trace nesnelerinin aynı izleme dinleyicilerini kullandığını öğrenmem faydalı oldu (bunu beklemiyordum), bu nedenle hem Debug.Write hem de Trace.Write çıktısını aynı yer (ler) e yazdırmak, idam edilemeyebilecekleri durumlarda
hello_earth

1
hangi koşullarda olduklarını açıklar mısın? tam olarak hangi durumda bir debug.Write trace.write ile aynı şekilde çalışmaz?
Pacerier

2
bu benim için çalışmıyor, proje özelliklerinde hata ayıklama ve izleme bayraklarım var ve Debug.WriteLine kullanıyorum, satır çalışıyor, ancak çıktı penceresinde hiçbir şey görünmüyor, kimsenin başka bir tavsiyesi var mı?
f1wade

115

Hata ayıklama System.Diagnostics.Debug.WriteLineçıktı penceresinde ( Ctrl+ Alt+ O) görüntülenirken, diğer konumlarda çıkış yapılacak çağrıları belirtmek TraceListeneriçin Debug.Listenerskoleksiyona bir de ekleyebilirsiniz Debug.WriteLine.

Not: AraçlarSeçeneklerHata AyıklamaGenelDebug.WriteLine menüsünde Visual Studio "Tüm Çıkış Penceresi metnini Anında Pencereye Yeniden Yönlendir" seçeneği işaretliyse, aramalar çıktı penceresinde görüntülenmeyebilir . " AraçlarSeçeneklerHata Ayıklama " yı görüntülemek için, " AraçlarSeçeneklerTüm Ayarları Göster " in yanındaki kutuyu işaretleyin .


4
Ben Visual Studio 2012 ayıklarken çıkış penceresini getirecek (Ctrl + Alt + O) teyit etmek istiyorum
Ishikawa

46

TraceListenerKonsolda görünmelerini görmek için bir eklemeniz gerekir .

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

Ayrıca Hata Ayıklama modundayken Visual Studio Çıkışı penceresinde görünürler.


2
: Anlaşılan DebugView NET Debug.Write () ve Win32 OutputDebugString () hem yakalayacaktır technet.microsoft.com/en-us/sysinternals/bb896647
dlchambers

@dlchambers: Bunun doğru olduğunu sanmıyorum. Bu sayfada OutputDebugString()ve (kernel) DbgPrint().
Mike C

1
@dlchambers: Yorumu geri çekiyorum; Ben DebugView yakalayabilir keşfetti Debug.Write() eğer Yönetici modunda çalışan gerektirir - onun Yakalama ayarları "genel Win32" sayılabilir.
Mike C

10

Visual Studio'da hata ayıklarken, "Çıktı" penceresini görüntüleyin (Görünüm-> Çıktı). Orada gösterecek.



5

Ben yazarken ( "") Debug.Write Komut penceresi "değil "Çıktı penceresinde" kodunda, içeri verir".

Deneyebilirsin. "Hemen" penceresini görüntülemek için ( Hata AyıklaPencereHemen ).


2

Benim durumum için çözüm:

  1. Çıktı penceresine sağ tıklayın;
  2. 'Program Çıktısını' kontrol edin

0

VB.NET için aşağıdakiler geçerlidir. "Hata Ayıkla" yı seçmeli VE "Hata Ayıklamaya Başladığınızdan" emin olmalısınız. Buna basarak ulaşılabilir F5.

Ayrıca Console.WriteLine, mesajları yalnızca Çıktı pencerenizde "Yayın" olarak oluştururken görüntüleyecektir.

Daha önce belirtildiği gibi, Çıktı penceresini GörünümÇıktı ile açın VE Console.WriteLine mesajlarını görmek istiyorsanız "Oluştur" u veya Debug.WriteLine veya Trace.WriteLine mesajlarını görmek istiyorsanız "Hata Ayıkla" yı seçtiğinizden emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.