Запис у вікно виводу 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.