Де відображається вихід System.Diagnostics.Debug.Write?


147

Наступна програма C # (побудована з csc hello.cs) друкує просто Hello via Console!на консолі та Hello via OutputDebugStringу вікні DebugView. Однак я не бачу жодного з System.Diagnostics.*дзвінків. Чому так?

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

Можливо, потрібні спеціальні комутатори командного рядка csc?

Я не використовую Visual Studio для будь-якої своєї розробки, це чистий матеріал командного рядка.


як уже згадувалося в якій - то коментар в іншому відповіді, можна використовувати (SysInternals) DebugView від Microsoft: technet.microsoft.com/en-us/sysinternals/bb896647.aspx
Джордж Birbilis

Відповіді:


77

Як зазначали інші, слухачі повинні бути зареєстровані, щоб прочитати ці потоки. Також зауважте, що він Debug.Writeбуде функціонувати лише якщо встановлено DEBUGпрапор збірки, тоді як він Trace.Writeбуде функціонувати лише у випадку, якщо встановлено TRACEпрапор збірки.

Встановлення DEBUGта / або TRACEпрапорів легко здійснити у властивостях проекту у Visual Studio або шляхом подання наступних аргументів на csc.exe

/define:DEBUG;TRACE


5
Для мене було корисно (не сподівався цього), щоб дізнатись, що об’єкти налагодження та трасування використовують однакові слухачі слідів, тому обидва виводи Debug.Write і Trace.Write в одне і те саме місце, це залежить лише від цього за умов, які вони можуть не бути виконані
hello_earth

1
Ви могли б детальніше пояснити, на яких умовах вони є? точно в якій ситуації debug.Write не працюватиме так само, як trace.write?
Pacerier

2
це не працює для мене, у мене встановлені правки налагодження та відстеження у властивостях проекту, і я використовую Debug.WriteLine, рядок виконується, але у вікні виводу нічого не з'являється, хто-небудь отримав іншу пораду?
f1wade

114

Під час налагодження System.Diagnostics.Debug.WriteLineбуде відображатися у вікні виводу ( Ctrl+ Alt+ O), ви також можете додати TraceListenerдо Debug.Listenersколекції , щоб вказати Debug.WriteLineвиклики на вихід в інших місцях.

Примітка: Debug.WriteLineдзвінки можуть не відображатись у вікні виводу, якщо у вас є опція Visual Studio "Перенаправити весь текст вікна виводу на негайне вікно" у меню ІнструментиПараметриНалагодженняЗагальне . Щоб відобразити " ІнструментиОпціїНалагодження ", поставте прапорець " ІнструментиПараметриПоказати всі налаштування ".


4
Я хотів би підтвердити, що (Ctrl + Alt + O) виведе вікно виводу під час налагодження в Visual Studio 2012
Ishikawa

45

Потрібно додати a, TraceListenerщоб побачити їх на консолі.

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

Вони також з'являються у вікні виводу Visual Studio у режимі налагодження.


2
Мабуть DebugView захопить як .NET Debug.Write () і Win32 OutputDebugString (): technet.microsoft.com/en-us/sysinternals/bb896647
dlchambers

@dlchambers: Я не думаю, що це правильно. Ця сторінка вимагає відображення OutputDebugString()та (ядра)DbgPrint().
Майка C

1
@dlchambers: я відкликаю коментар; Я виявив, що DebugView може захоплювати, Debug.Write() якщо в його налаштуваннях Capture включено "Global Win32" - що вимагає запуску його в режимі адміністратора.
Майк C

10

Під час налагодження в Visual Studio відобразити вікно "Вихід" (Перегляд-> Вихід). Це там покажуть.



5

Коли я пишу debug.write ("") у код, він виводиться у "Негайне вікно", а не у "Вихідне вікно".

Можна спробувати. Для відображення вікна "Негайне" ( НалагодженняВікноНегайне ).


2

Рішення для моєї справи:

  1. Клацніть правою кнопкою миші вікно виводу;
  2. Перевірте "Вихід програми"

0

Для VB.NET застосовується наступне. Ви повинні вибрати "Налагодження" І переконатися, що ви "Почніть налагодження". Цього можна досягти натисканням F5.

Також Console.WriteLine буде відображати повідомлення лише під час побудови як "Release" у вікні Output.

Як згадувалося раніше, відкрийте вікно виводу за допомогою ПереглядуВиведення І переконайтесь, що виберіть або «Створити», якщо ви хочете бачити повідомлення Console.WriteLine, або «Налагодження», якщо ви хочете бачити повідомлення Debug.WriteLine або Trace.WriteLine.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.