Visual Studio'nun çıktı penceresine yazma


605

Hata ayıklama amacıyla çıktı penceresine bir ileti yazmaya çalışıyorum. Java gibi bir işlev aradım system.out.println(""). Denedim Debug.Write, Console.Writeve Trace.Write. Hata vermez, ancak hiçbir şey yazdırmaz.

"DEBUG sabitini tanımla" ve "TRACE sabitini tanımla" seçenekleri işaretlenir.

Menü AraçlarSeçeneklerHata ayıklama"Tüm Çıktı Penceresi metnini Anında Pencereye yönlendir" seçeneği işaretli değildir.

Yapılandırma: Etkin (Hata Ayıklama)

Not: İlgilisa sihirbazla "Windows Forms Uygulaması" olarak bir proje oluşturdum. Nereye bakacağım hakkında hiçbir fikrim yok.


32
kullanmaya çalışınDebug.WriteLine()
Nikson Kanti Paul

9
Bu daha eski bir gönderi olduğundan, bunu soru boyunca rastlayanlar için yorum olarak ekleyeceğim. Aslında kodu değiştirmek yerine, izleme noktaları adı verilen özel kesme noktalarını da kullanabilirsiniz. MSDN belgelerine
Wonko the Sane

13
Yalnızca Debug.WriteLine () öğesinin yalnızca Debug'da çalışırken çalışacağını hatırlatmak isteriz. Bu CTRL-F5 ile değil F5 ile çalıştırmak anlamına gelir. Bunu kaçırmak kolaydır.
kirk.burleson

3
Bu doğru, ancak kullanışlı bir araç, hata ayıklayıcının dışında çalışırken hata ayıklama akışına tüm çıktıları gösteren DebugView'dur
the_mandrill

2
Visual Studio sınama çerçevesi altında çalışan bir birim sınamasından çıktı yazmaya çalışıyorsanız, kurallar biraz farklıdır, ayrıntılar için bu cevaba bakın.
yoyo

Yanıtlar:


754

System.DiagnosticsAd alanını ekleyin ve ardından Debug.WriteLine()IDE'nin çıkış penceresine hızlı bir şekilde mesaj yazdırmak için kullanabilirsiniz . Daha fazla ayrıntı için lütfen şunlara bakın:


2
Teşekkür ederim. Hata ayıklama (ctrl-f5) olmadan başlatırsanız çıktı yazmak için bir yol olmadığını varsayalım değil mi?
previous_developer

1
Sanırım bunu arıyorsunuz: stackoverflow.com/questions/562590/…
Bhargav Bhat

Tekrar teşekkürler ama bu benim için işe yaramadı. TRACE sabiti tanımlanmış olsa bile izleme, hata ayıklama modu olmadan yazdırılmaz.
previous_developer

Sadece burada küçük bir uygulama koştu, benim için iyi çalışıyor. Belki de çevrenizde küçük bir aksaklık var mı?
Bhargav Bhat

1
Bu benim test kodum; pastebin.com/b7P0bYEa Oldukça basit ama yine de hiçbir şey. Başka bir sistemde deneyeceğim.
previous_developer

154

Bu hata ayıklama çıktı penceresine yazacaktır:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

6
Benim için bu Anlık pencereye "çıktılar"
nuander

Bunu bir dizi birim testte denedim. Seçilen testte hata ayıkladım, ancak hata ayıklama penceresinde yazdırmaya çalıştığım hiçbir şey yoktu.
Frank H.

Ancak, hata ayıklama penceresine yalnızca web sayfasını kapattıktan sonra çıktı. Kodu yürüttüğümde hemen bir görüntü istiyorum. Bir dakika - Kod yürütülürken çıktı penceresinin gizli olduğunu buldum. Pencereyi görüntülersem, çıktım orada.
Joe Cotton

Hata ayıklama penceresinde yazdırılan bu iletinin günlüğünü tutabilir miyiz? veya visual studio hata ayıklama penceresinin günlüklerine erişmek için herhangi bir yol sunuyor mu?
Anmol Rathod

82

kullanın:

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

55
Debug.WriteLine

aradığınız şey bu.

Değilse, bunu deneyin:

Menü AraçlarSeçeneklerHata ayıklamaÇıktıyı Hemen Gönder seçeneğinin işaretini kaldırın .


1
Muhtemelen Debug.Write () satırbaşı eklemiyor, bu yüzden mesajlar arabelleğe alınıyor mu?
Guy Starbuck

2
Debug.WriteLine ("String"), Micah'ın söylediklerini yapana kadar görmedim. Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366

3
Sonraki sürümlerde onay kutusunun "Tüm Çıktı Penceresi metnini Anında Pencereye
Houdini Sutherland

6
VS 2015'te şöyle denir: "Tüm Çıktı Penceresi metnini Anlık Pencereye yönlendir", her ihtimale karşı bazılarının uygun ayarı bulmak için 5 dakika aramak zorunda kaldım :) - ile başlayarak bir seçenek bulmak için yukarı ve aşağı kaydırıyordum " Gönder ... ":)
dba

22

Benim için, Hata ayıklama yerine yalnızca Trace ad alanı çalıştı:

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

Visual Studio 2010 altında bir C # projesinde çalışıyorum.


2
VS 2013 Professional kullanıyorum ve Visual Studio birim sınama çerçevesini kullanarak bir birim sınama çıktı almaya çalışıyorum. Test kablo demeti Debug.WriteLine öğesini yakalar ve yönlendirir ancak Trace.WriteLine öğesini yönlendirmez. Ayrıca, testlerde hata ayıklamadığınız sürece Trace çıktısını görmezsiniz (yalnızca çalıştırmaz).
yoyo

15

Arıyor olabilirsiniz

MessageBox.Show()

veya

Debug.Writeline()

8
MessageBox.Show()hata ayıklama amacıyla birden çok değer yazmak istediğinizde çok can sıkıcı olabilir.
Dementic

4
Soru "Visual Studio'nun çıktı penceresine yazma?" bir mesaj kutusuna değil.
Amir Touitou

@AmirTwito Bir mesaj kutusu bir çıkış penceresidir.
ProfK

4
Evet haklısın, ama soru "Visual Studio'nun çıktı penceresine yazılıyor mu?" ve bu kodu kullanarak basit bir mesaj kutusuna değil: MessageBox.Show ()
Amir Touitou

4
@ProfK Visual Studio Çıktı Penceresi , belirli bir programın çok özel bir GUI öğesidir ve MessageBox.Showona yazmaz.
jpmc26

9

Arama

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

.NET Core (V 1.0 veya 1.1) ile çalışırken başarısız olur .

Bir günlükçü oluşturmamız ve kullanmamız gerekiyor Microsoft.Extensions.Logging, ancak bu günlük yalnızca Visual Studio'nun Çıktı penceresinde değil, dotnet.exe açılır konsol penceresinde görünür.


Debug.WriteLine (), Console.WriteLine () ve Trace.WriteLine () .Net Core için Çıktı'da hiçbir şey çıktılamıyor mu? Herhangi bir şekilde bir Logclass yazmak zorunda kalmadan basit günlük kullanmak için herhangi bir yolu? Araçlar> Seçenekler> Hata ayıklama'da arama yaptınız ve olası çözümler için "Şu kaynaktan çıktıyı göster:" seçeneğini işaretleyin.
Wouter Vanherck

4

Bu, üçüncü taraf bir çerçeve, yani Serilog gerektirir , ancak yine de görebildiğim bir yere çıktı alma konusunda çok düzgün bir deneyim buldum.

Önce Serilog'un Trace lavabosunu kurmanız gerekir . Kurulduktan sonra, kaydediciyi şu şekilde ayarlamanız gerekir:

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

(Farklı bir minimum seviye ayarlayabilir veya bir yapılandırma değerine veya normal Serilog işlevlerinden herhangi birine ayarlayabilirsiniz Trace.

Sonra iletileri normal şekilde günlüğe kaydedersiniz ve bunlar Çıktı pencerenizde görünür:

Logger.Information("Did stuff!");

Bu o kadar büyük bir şey gibi görünmüyor, bu yüzden bazı ek avantajları açıklayayım. Benim için en büyüğü , hem Çıktı penceresine hem de konsola aynı anda giriş yapabilmemdi :

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

Bu, tüm aramalarıma çoğaltmak zorunda kalmadan, bana çıktı tüketilen nasıl açısından büyük bir esneklik verdi Console.Writeile Debug.Write. Kodu yazarken, çıkış sırasında çıkışımı kaybetme korkusu olmadan Visual Studio'da komut satırı aracımı çalıştırabilirim. Dağıttığımda ve bir şeyde hata ayıklamak istediğimde (ve Visual Studio'yu kullanamadığımda), konsol çıktısı tüketimim için hazırdı. Aynı iletiler, zamanlanmış görev olarak çalışırken bir dosyaya (veya başka bir lavaboya) da kaydedilebilir.

Sonuç olarak Serilog'un bunu yapmak için mesajları çok sayıda hedefe dökmeyi gerçekten kolaylaştırarak, nasıl çalıştırdığımdan bağımsız olarak çıktıya her zaman kolayca erişebilmemi sağladım.

Ayrıca çok az kurulum ve kod gerektirir.


1
Serilog şimdi de benzer şekilde çalışan ancak biraz daha güzel biçimlendirmeye sahip olan github.com/serilog/serilog-sinks-debug'da "hata ayıklama" havuzuna sahip :-) HTH!
Nicholas Blumhardt

Neden bir .net genel (statik olabilir) yöntemi yapmıyorsunuz ve orada Console.Write veya Debug.Write vb.
Saulius

@Saulius "Zamanlanmış bir görev olarak çalışırken aynı iletiler bir dosyaya (ya da başka bir lavaboya) da kaydedilebilir. Sonuçta Serilog'u kullanarak bunu çok sayıda iletiye dökmek çok kolay hedefler, nasıl çalıştırdığımdan bağımsız olarak çıktıya her zaman kolayca erişebilmemizi sağlar. "
jpmc26

1

Bu asıl sorunun cevabı değil. Ancak, etkileşimli olarak dökülen nesne verilerinin bir yolunu ararken bu soruyu bulduğumdan, başkalarının bu çok faydalı alternatiften bahsetmekten fayda sağlayabileceğini düşündüm.

Sonunda Komut Penceresini kullandım ve Debug.Printaşağıda gösterildiği gibi komutu girdim . Bu, bir bellek nesnesini metin olarak kopyalanabilecek bir formatta yazdırdı, ki bu gerçekten ihtiyacım olan tek şey.

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"


0

Visual Studio 2015'te aşağıdakiler benim için çalıştı:

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

OutputDebugStringW belgelerini buradan okuyun .

resim açıklamasını buraya girin Bu yöntemin yalnızca kodunuzda hata ayıklarsanız çalıştığını unutmayın ( debug mode)


11
Bu C ++ mı? Soru c # olarak etiketlenmiştir .
jpmc26

0

Hata ayıklama amacıyla, System.Diagnostics.Debug.Writeline()hata ayıklama dinleyicileriniz olmadığı sürece komut kodunuzun yayın sürümünde derlenmeyecektir. Hata ayıklama modunda çalışırken VS çıkış penceresini içeren tüm iz dinleyicilere yazar.

Konsol uygulaması için. Console.Writeline()ancak çıktı ikili dosyanızın yayın sürümünde de oluşturulur.

Hata ayıklama çıktıları, hata ayıklama testleri sırasında normal çıktı penceresinde de görünmelidir; oysa, console.writeline çıktısı yoktur (ancak test çıktısı penceresinde bulunabilir.)

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.