Запис у вікно виводу Visual Studio


605

Я намагаюся написати повідомлення у вихідне вікно для налагодження. Я шукав таку функцію, як Java system.out.println(""). Я спробував Debug.Write, Console.Writeі Trace.Write. Це не дає помилки, але також нічого не друкує.

Параметри "Визначити константу DEBUG" та "Визначити константу TRACE" перевіряються.

Інструменти меню → Опції → Налагодження → "Перенаправити весь текст у вихідному вікні на негайне вікно" не встановлено.

Конфігурація: Активна (налагодження)

Примітка. Я створив проект за допомогою майстра під назвою "Додаток для форм Windows", якщо це доречно. Я поняття не маю, де шукати.


32
спробуйте використовуватиDebug.WriteLine()
— Nikson Kanti Paul

9
Оскільки це старіший пост, я додаю це як коментар для тих, хто натрапляє на питання. Замість того, щоб насправді змінити код, ви також можете використовувати спеціальні точки перерви під назвою траспойнт. Дивіться документацію MSDN
— Wonko the Sane

13
Просто нагадування про те, що Debug.WriteLine () працюватиме лише під час запуску в програмі Debug. Це означає, що він працює з F5, а не CTRL-F5. Це легко пропустити.
— kirk.burleson

3
Це правда, але зручним інструментом є DebugView, який показує весь вихід у потік налагодження під час роботи поза налагоджувачем
— the_mandrill

2
Якщо ви намагаєтесь записати висновок з тестового модуля, який працює в рамках тестової рамки Visual Studio, правила дещо відрізняються, детальну інформацію див. У цій відповіді .
— yoyo

Відповіді:


754

Додайте System.Diagnosticsпростір імен, після чого ви зможете Debug.WriteLine()швидко роздрукувати повідомлення у вихідному вікні IDE. Більш детально, будь ласка, зверніться до таких:


2
Дякую. Я припускаю, що немає способу записати на вихід, якщо я почну без налагодження (ctrl-f5), правда?
— попередній_розробник

1
Я думаю, ти шукаєш це: stackoverflow.com/questions/562590/…
— Bhargav Bhat

Ще раз дякую, але це не працює для мене. Трасування не друкується без режиму налагодження, навіть якщо визначено константу TRACE.
— попередній_девелопер

Просто запустив невеликий додаток тут, мені добре працює. Можливо, у вашому оточенні є невеликий збій?
— Bhargav Bhat

1
Це мій тестовий код; pastebin.com/b7P0bYEa Це досить просто, але все одно нічого. Я спробую це в іншій системі.
— попередній_розробник

154

Це запише у вікно виводу налагодження:

using System.Diagnostics;

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

6
Для мене це "виводить" у вікно
— Негайного

Я спробував це на наборі тестових одиниць. Я налагодив вибраний тест, але нічого не було, що я намагався роздрукувати у вікні налагодження.
— Френк Х.

Це робить вихід у вікно налагодження лише після закриття веб-сторінки. Я хотів би негайне відображення, коли я виконую код. Зачекайте хвилину - я виявив, що вікно виводу приховано під час виконання коду. Якщо я показую вікно, мій вихід є.
— Джо Коттон

Чи можемо ми зберігати журнал цього повідомлення, який друкується у вікні налагодження? чи візуальна студія надає будь-який спосіб отримати доступ до журналів вікна налагодження ..?
— Anmol Rathod


55
Debug.WriteLine

це те, що ви шукаєте.

Якщо ні, спробуйте зробити це:

Інструменти меню → Опції → Налагодження → зніміть прапорець Відправити вихідний термін .


1
Можливо, Debug.Write () не вставляє повернення каретки, тому повідомлення буферуються?
— Гай Старбак

2
Я не бачив Debug.WriteLine ("Рядок"), поки не зробив те, що сказав Міхе. Tools|Options|Debugging uncheck Send Output to Immediate
— Skindeep2366

3
Я думаю, що в пізніших версіях прапорець "Перенаправити весь текст у вихідному вікні на негайне вікно"
— Худіні Сазерленд,

6
у VS 2015 він називається: "Перенаправити весь текст у вихідному вікні на негайне вікно", на всякий випадок, дехто повинен був шукати 5 хвилин, щоб знайти відповідне налаштування :) - Я прокручував вгору та вниз, щоб знайти варіант, починаючи з " Надішліть ... ":)
— dba

22

Для мене працював лише простір імен Trace, а не налагодження:

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

Я працюю над проектом C # під Visual Studio 2010.


2
Я використовую VS 2013 Professional і намагаюся отримати вихід з тестування одиниць за допомогою тестової рамки модуля Visual Studio. Здається, тестовий джгут захоплює і перенаправляє Debug.WriteLine, але не Trace.WriteLine. І ви не побачите вихід Trace, якщо ви не налагодите тести (не просто запустити їх).
— yoyo

15

Ви можете шукати

MessageBox.Show()

або

Debug.Writeline()

8
MessageBox.Show()може бути дуже прикро, коли ви хочете написати кілька значень для цілей налагодження.
— Дементік

4
Питання було "Писати у вікно виводу Visual Studio?" не до вікна повідомлень.
— Амір Туіту

@AmirTwito Вікно повідомлень - це вікно виводу.
— ПрофК

4
Так, ви маєте рацію, але питання було "Написати у вихідне вікно Visual Studio?" а не до простого вікна повідомлень, використовуючи цей код: MessageBox.Show ()
— Амір Туіту

4
@ProfK Вихідне вікно Studio Visual Studio - це дуже специфічний елемент графічного інтерфейсу конкретної програми, і MessageBox.Showне пише в неї.
— jpmc26

9

Виклик

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

не працює під час роботи з .NET Core (V 1.0 або 1.1).

Ми повинні створити та використовувати реєстратор з Microsoft.Extensions.Logging, але цей журнал відображається лише у вікні консолі dotnet.exe, а не у вікні виводу Visual Studio.


Отже Debug.WriteLine (), Console.WriteLine () і Trace.WriteLine () нічого не виводить у Output for .Net Core? Будь-який спосіб використовувати якийсь простий журнал без необхідності писати Logclass? Шукали в Інструментах> Параметри> Налагодження і перевірили "Показати вихід з:" для можливих рішень.
— Wouter Vanherck

4

Для цього потрібна система сторонніх розробників, а саме Serilog , але я все-таки виявив, що це дуже плавний досвід отримання виводу в якесь місце, де я його бачу.

Спочатку необхідно встановити Serilog в Трасування мийку . Після встановлення вам потрібно налаштувати реєстратор таким чином:

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

(Ви можете встановити інший мінімальний рівень або встановити його на значення конфігурації або будь-яку з звичайних функцій Serilog. Ви також можете встановити Traceреєстратор на певний рівень, щоб замінити конфігурації, або як би ви хочете це зробити.)

Тоді ви просто записуєте повідомлення, і вони відображаються у вікні виводу:

Logger.Information("Did stuff!");

Це не здається такою великою справою, тому дозвольте мені пояснити деякі додаткові переваги. Найбільшим для мене було те, що я могла одночасно входити у вікно виводу та на консоль :

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

Це дало мені велику гнучкість в плані того , як я споживав вихід, без необхідності дублювати всі мої дзвінки Console.Writeз Debug.Write. Під час написання коду я міг запустити свій інструмент командного рядка у Visual Studio, не боячись втратити вихід, коли він вийшов. Коли я розгорнув це і мені потрібно було щось налагодити (а у нього не було доступно Visual Studio), вихід консолі був легко доступний для мого споживання. Ті ж повідомлення також можна записати у файл (або будь-який інший тип раковини), коли він працює як заплановане завдання.

Суть полягає в тому, що використання Serilog для цього зробило дійсно легким скидання повідомлень на безліч пунктів призначення, гарантуючи, що я завжди міг легко отримати доступ до виводу незалежно від того, яким чином я його застосував.

Він також вимагає дуже мінімальної настройки та коду.


1
Тепер Serilog також має мийку "налагодження" на github.com/serilog/serilog-sinks-debug, яка функціонує аналогічно, але має дещо приємніше форматування :-) HTH!
— Nicholas Blumhardt

Чому б не зробити .net загальнодоступним (може бути статичним) методом і поставити туди все необхідне, як Console.Write або Debug.Write тощо, і не використовувати його скрізь?
— Саулюс

@Saulius "Ті ж повідомлення також можна ввійти у файл (або будь-який інший тип раковини), коли він працює як заплановане завдання. Суть полягає в тому, що за допомогою програми Serilog це зробило дійсно просто скинути повідомлення на безліч пункти призначення, гарантуючи, що я завжди можу легко отримати доступ до результатів, незалежно від того, як я його застосував ".
— jpmc26

1

Це не відповідь на початкове запитання. Але оскільки я знайшов це питання під час пошуку засобів інтерактивного демпінгу даних об’єктів, я подумав, що інші можуть отримати користь від згадки про цю дуже корисну альтернативу.

Я врешті-решт використав вікно команд і ввів Debug.Printкоманду, як показано нижче. Це надрукував об’єкт пам'яті у форматі, який можна скопіювати як текст, що є все, що мені справді потрібно.

> 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 працювали мені:

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

Прочитайте документацію для OutputDebugStringW тут .

введіть тут опис зображення Зауважте, що цей метод працює лише в тому випадку, коли ви налагоджуєте код ( debug mode)


11
Це C ++? Питання позначено тегом c # .
— jpmc26

0

З метою налагодження System.Diagnostics.Debug.Writeline()команда не буде складена у версію випуску вашого коду, якщо у вас немає слухачів налагодження. Він пише всім слухачам трас, що включає вікно виводу VS під час роботи в режимі налагодження.

Для програми Console. Console.Writeline()буде працювати, але вихід все одно буде генерований у версії випуску вашого бінарного файлу.

Вивід налагодження також повинен з'являтися у звичайному вікні виводу під час налагодження тестів; тоді як результат консолі.writeline не є (але його можна знайти у вікні тестового виводу.)

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