Печать новой строки с использованием System.Diagnostics.Debugger.Log - PullRequest
6 голосов
/ 11 июля 2011

Я печатаю много строк в моем журнале во время отладки следующим образом:

System.Diagnostics.Debugger.Log(0, null, responseFromServer);
System.Diagnostics.Debugger.Log(0, null, t[0]); 
....

Все они печатаются в одной строке. Как я могу заставить их печатать в отдельных строках?

Я пытался использовать

System.Diagnostics.Debugger.Log(0, null, t[0]+"\n");

Но это не сработало. Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

9 голосов
/ 11 июля 2011

В .NET идиома Environment.NewLine - это System.String, которая состоит из надлежащих System.Char (s) для завершения строки текста, поэтому:

System.Diagnostics.Debugger.Log(0, null, t[0] + Environment.NewLine);

[Обновлено 2015-05-07]

Размышляя об этом несколько лет спустя, я чувствую, что, по крайней мере, чуть-чуть сбросил мяч (хотя я делаю думаю, что важно иметь возможность делать NewLine низкого уровня) без необходимости иногда драться с языком, поэтому мне также нравится оригинальный ответ ...)

Прежде всего, Дэвид Браун дал хороший ответ ниже: вместо него использовали System.Diagnostics.Debug.WriteLineWrite). Это является хорошим решением для этого, особенно в случае OP, так как другие параметры вызова даже не используются; и вызовы Debug.Write / WriteLine выглядят так (используя для примера исходные вызовы OP, предполагая в качестве примера, что первоначальный первый параметр OP responseFromServer уже завершен, а второй необходим для завершения):

System.Diagnostics.Debug.Write(responseFromServer);
System.Diagnostics.Debug.WriteLine(t[0]);

Легко, peasy.

Хотя еще лучше, почему бы не Trace?

Я просто укажу вам этот вопрос о переполнении стека здесь но вот суть.

Вы можете настроить в своем App.config, но, конечно, вы также можете просто создать все это программно, поскольку разделы app.config просто создают объекты!

Что-то вроде:

     ⋮
   <trace>
      <!-- note: notional notation only -->
      <add name="consoleLog" logLevel="debug" enabled="" type="⋯ 
      <add name="netLog" logLevel="verbose" enabled="false" addr="rdp://127.0.0.1:1935/nothing/stream" type="⋯
      <add name="fileLog" logLevel="errors" enabled="true" file="c:\boots.ini" type="⋯ 
   </trace>
     ⋮ 

и тогда ваш код вызывает Trace() точно так же как Debug().

System.Diagnostics.Trace.Write(responseFromServer);
System.Diagnostics.Trace.WriteLine(t[0]);

Да, это многоцелевой; и вы можете настроить его как многоцелевой, и вы можете использовать встроенные типы System.Diagnostics Trace (например, трассировщик Console, если вы хотите печатать на экране, например), или вы можете создать ваши собственные пользовательские типы по мере необходимости. Красивая!

Последнее слово: и в Debug, и в Trace есть много вспомогательных функций, которые делают любые записи, которые вы делаете, более символичными; WriteLineIf, TraceError и т. Д., И стоит поиграть с ними, пока вы не выясните, почему они там есть. Это почти гарантирует, что чем больше вы используете их, тем больше полезных вы найдете их. ♡

3 голосов
/ 11 июля 2011

Согласно документации System.Diagnostics.Debugger.Log, метод имеет странное поведение в зависимости от настроек, выбранных в Visual Studio.Если включена отладка неуправляемого кода, к строкам, выводимым Debugger.Log, добавляется разделитель строк.В противном случае все строки пишутся в одной строке.

Вместо этого вы можете попробовать различные методы класса System.Diagnostics.Debug.Существуют Write методы (которые принимают новые строки) и WriteLine методы, которые добавляют новую строку автоматически.Оба из которых также имеют перегрузки, которые принимают отформатированные строки.

...