Использование классов трассировки и отладки в Visual Basic .NET
В этой статье содержатся сведения об использовании Debug
классов и в Trace
Visual Basic .NET.
Исходная версия продукта: Visual Basic .NET
Исходный номер базы знаний: 313417
Сводка
В этой статье показано, как использовать классы Debug
Trace
и . Эти классы доступны в microsoft платформа .NET Framework. Эти классы можно использовать для предоставления сведений о производительности приложения во время разработки приложения или после развертывания в рабочей среде. Эти классы являются лишь частью функций инструментирования, доступных в платформа .NET Framework.
Требования
В следующем списке описаны рекомендуемые оборудование, программное обеспечение, сетевая инфраструктура и пакеты обновления.
- Windows
- Visual Basic .NET
В этой статье также предполагается, что вы знакомы с отладкой программ.
Описание метода
Действия в разделе Создание примера с классом Debug демонстрируют, как создать консольное приложение, которое использует Debug
класс для предоставления сведений о выполнении программы.
При запуске программы можно использовать методы Debug
класса для создания сообщений, которые помогают отслеживать, обнаруживать неисправности или предоставлять сведения об измерении производительности. По умолчанию сообщения, создаваемые классом Debug
, отображаются в окне Выходные данные интегрированной среды разработки (IDE) Microsoft Visual Studio.
В примере кода метод используется WriteLine
для создания сообщения, за которым следует признак конца строки. При использовании этого метода для создания сообщения каждое сообщение отображается в отдельной строке в окне Выходные данные.
При использовании Assert
метода Debug
класса в окне Вывод отображается сообщение только в том случае, если указанное условие имеет значение false. Сообщение также отображается в модальном диалоговом окне для пользователя. Диалоговое окно содержит сообщение, имя проекта и номер инструкции Debug.Assert
. Диалоговое окно также содержит три командные кнопки:
- Прерывание: приложение перестает работать.
- Повторите попытку: приложение переходит в режим отладки.
- Игнорировать: приложение продолжает работу. Пользователь должен щелкнуть одну из этих кнопок, прежде чем приложение сможет продолжить работу.
Вы также можете направлять выходные данные из класса в Debug
назначения, отличные от окна Вывода. Класс Debug
имеет коллекцию с именем Listeners
, включающую объекты Listener. Каждый объект Прослушивателя отслеживает выходные Debug
данные и направляет выходные данные в указанный целевой объект. Каждый прослушиватель в Listeners
коллекции получает все выходные данные, создаваемые классом Debug
. Используйте класс для TextWriterTraceListener
определения объектов Прослушивателя. Целевой объект для TextWriterTraceListener
класса можно указать с помощью его конструктора. Ниже приведены некоторые возможные целевые показатели выходных данных.
- Окно консоли с помощью
System.Console.Out
свойства . - Текстовый файл с помощью инструкции
System.IO.File.CreateText("FileName.txt"))
.
После создания TextWriterTraceListener
объекта необходимо добавить объект в коллекцию Debug.Listeners
для получения Debug
выходных данных.
Создание примера с помощью класса Debug
Используйте Visual Basic .NET, чтобы создать проект консольного приложения с именем conInfo. Общедоступный модуль с именем
Module1
добавляется в проект по умолчанию.Чтобы инициализировать переменные для хранения сведений о продукте, добавьте следующие
Dim
инструкции:Dim sProdName As String = "Widget" Dim iUnitQty As Integer = 100 Dim dUnitCost As Decimal = 1.03
Укажите сообщение, которое создает класс в качестве первого входного
WriteLine
параметра метода . Нажмите сочетание клавиш CTRL+ALT+O, чтобы убедиться, что окно выводов отображается.Debug.WriteLine("Debug Information-Product Starting ")
Для удобства чтения используйте метод для
Indent
отступа последующих сообщений в окне Вывод:Debug.Indent()
Чтобы отобразить содержимое выбранных переменных, используйте
WriteLine
метод следующим образом:Debug.WriteLine("The product name is " & sProdName) Debug.WriteLine("The available units on hand are " & iUnitQty) Debug.WriteLine("The per unit cost is " & dUnitCost)
Метод также можно использовать для
WriteLine
отображения пространства имен и имени класса для существующего объекта. Например, следующий код отображаетSystem.Xml.XmlDocument
пространство имен в окне Выходные данные:Dim oxml As New System.Xml.XmlDocument() Debug.WriteLine(oxml)
Чтобы упорядочить выходные данные, можно включить категорию в качестве дополнительного второго входного
WriteLine
параметра метода. Если указать категорию, формат сообщения окна вывода будет "category: message". Например, в первой строке следующего кода в окне Выходные данные отображается сообщение "Поле: название продукта — Мини-приложение".Debug.WriteLine("The product name is " & sProdName, "Field") Debug.WriteLine("The units on hand are " & iUnitQty, "Field") Debug.WriteLine("The per unit cost is " & dUnitCost, "Field") Debug.WriteLine("Total Cost is" & iUnitQty * dUnitCost, "Calc")
В окне Выходные данные могут отображаться сообщения только в том случае, если указанное условие имеет значение true с помощью
WriteLineIf
методаDebug
класса . Условие для вычисления является первым входным параметромWriteLineIf
метода . Второй параметрWriteLineIf
— это сообщение, которое появляется только в том случае, если условие в первом параметре имеет значение true.Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear") Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")
Используйте метод
Debug
Assert класса , чтобы в окне Выходные данные отображалось сообщение только в том случае, если указанное условие имеет значение false:Debug.Assert(dUnitCost > 1, "Message will NOT appear") Debug.Assert(dUnitCost < 1, "Message will appear")
TextWriterTraceListener
Создайте объекты для окна консоли (tr1
) и текстового файла с именемOutput.txt (tr2
), а затем добавьте каждый объект в коллекциюDebug
Listeners
:Dim tr1 As New TextWriterTraceListener(System.Console.Out) Debug.Listeners.Add(tr1) Dim tr2 As New _ TextWriterTraceListener(System.IO.File.CreateText("Output.txt")) Debug.Listeners.Add(tr2)
Для удобства чтения используйте
Unindent
метод , чтобы удалить отступ для последующих сообщений, создаваемых классомDebug
. При совместномIndent
использовании методов иUnindent
средство чтения может различать выходные данные как группу.Debug.Unindent() Debug.WriteLine("Debug Information-Product Ending")
Чтобы убедиться, что каждый объект Listener получает все выходные данные, вызовите
Flush
метод дляDebug
буферов классов:Debug.Flush()
Использование класса Trace
Класс также можно использовать для Trace
создания сообщений, которые отслеживают выполнение приложения. Классы Trace
и Debug
используют большинство одинаковых методов для получения выходных данных, в том числе:
WriteLine
WriteLineIf
Indent
Unindent
Assert
Flush
Классы Trace
и можно использовать по отдельности Debug
или вместе в одном приложении. В проекте конфигурации решения отладки активны и Trace
Debug
выходные данные. Проект создает выходные данные из обоих этих классов для всех объектов Listener. Однако проект "Конфигурация решения выпуска" создает выходные данные только из Trace
класса . Проект "Конфигурация решения выпуска" игнорирует вызовы Debug
метода класса.
Trace.WriteLine("Trace Information-Product Starting ")
Trace.Indent()
Trace.WriteLine("The product name is " & sProdName)
Trace.WriteLine("The product name is " & sProdName, "Field")
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")
Trace.Assert(dUnitCost > 1, "Message will NOT appear")
Trace.Unindent()
Trace.WriteLine("Trace Information-Product Ending")
Trace.Flush()
Console.ReadLine()
Убедитесь, что он работает
Убедитесь, что отладка — это текущая конфигурация решения.
Если окно Обозреватель решений не отображается, нажмите сочетание клавиш CTRL+ALT+L, чтобы отобразить это окно.
Щелкните правой кнопкой мыши conInfo и выберите пункт Свойства.
В левой области страницы свойств conInfo в папке Конфигурация убедитесь, что стрелка указывает на Отладка.
Над папкой Конфигурация в раскрывающемся списке Конфигурация щелкните Активный (Отладка) или Отладка, а затем нажмите кнопку ОК.
Нажмите клавиши CTRL+ALT+O, чтобы открыть окно Вывод.
Нажмите клавишу F5, чтобы запустить код. Когда появится диалоговое окно Сбой утверждения, нажмите кнопку Игнорировать.
В окне консоли нажмите клавишу ВВОД. Программа должна завершить работу, а в окне Выходные данные должны отобразиться следующие выходные данные:
Debug Information-Product Starting The product name is Widget The available units on hand are 100 The per unit cost is 1.03 System.Xml.XmlDocument Field: The product name is Widget Field: The units on hand are 100 Field: The per unit cost is 1.03 Calc: Total cost is 103 This message WILL appear ---- DEBUG ASSERTION FAILED ---- ---- Assert Short Message ---- Message will appear ---- Assert Long Message ---- at Module1.Main() C:\Documents and Settings\Administrator\My Documents\Visual Studio Projects\conInfo\Module1.vb(29) The product name is Widget The available units on hand are 100 The per unit cost is 1.03 Debug Information-Product Ending Trace Information-Product Starting The product name is Widget Field: The product name is Widget This message WILL appear Trace Information-Product Ending
В окне Консоли и файле Output.txt должны отображаться следующие выходные данные:
(The Output.txt file is located in the same directory as the conInfo executable, conInfo.exe. Normally this is the \bin folder of where the project source has been stored. By default that would be C:\Documents and Settings\User login\My Documents\Visual Studio Projects\conInfo\bin) The product name is Widget The available units on hand are 100 The per unit cost is 1.03 Debug Information-Product Ending Trace Information-Product Starting The product name is Widget Field: The product name is Widget This message WILL appear Trace Information-Product Ending
Полный список кода
Module Module1
Sub Main()
Dim sProdName As String = "Widget"
Dim iUnitQty As Integer = 100
Dim dUnitCost As Decimal = 1.03
Debug.WriteLine("Debug Information-Product Starting ")
Debug.Indent()
Debug.WriteLine("The product name is " & sProdName)
Debug.WriteLine("The available units on hand are " & iUnitQty)
Debug.WriteLine("The per unit cost is " & dUnitCost)
Dim oxml As New System.Xml.XmlDocument()
Debug.WriteLine(oxml)
Debug.WriteLine("The product name is " & sProdName, "Field")
Debug.WriteLine("The units on hand are " & iUnitQty, "Field")
Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")
Debug.WriteLine("Total cost is " & iUnitQty * dUnitCost, "Calc")
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")
Debug.Assert(dUnitCost > 1, "Message will NOT appear")
Debug.Assert(dUnitCost < 1, "Message will appear")
Dim tr1 As New TextWriter`Trace`Listener(System.Console.Out)
Debug.Listeners.Add(tr1)
Dim tr2 As New _
TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))
Debug.Listeners.Add(tr2)
Debug.WriteLine("The product name is " & sProdName)
Debug.WriteLine("The available units on hand are " & iUnitQty)
Debug.WriteLine("The per unit cost is " & dUnitCost)
Debug.Unindent()
Debug.WriteLine("Debug Information-Product Ending")
Debug.Flush()
Trace.WriteLine("`Trace` Information-Product Starting ")
Trace.Indent()
Trace.WriteLine("The product name is " & sProdName)
Trace.WriteLine("The product name is " & sProdName, "Field")
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")
Trace.Assert(dUnitCost > 1, "Message will NOT appear")
Trace.Unindent()
Trace.WriteLine("Trace Information-Product Ending")
Trace.Flush()
Console.ReadLine()
End Sub
End Module
Устранение неполадок
Если тип конфигурации решения — Release, выходные
Debug
данные класса игнорируются.После создания
TextWriterTraceListener
класса для определенного целевого объектаTextWriterTraceListener
получает выходныеTrace
данные от классов иDebug
. Это происходит независимо от того, используетсяAdd
ли методTrace
класса илиDebug
для добавленияTextWriterTraceListener
вListeners
класс.Если добавить объект Listener для одного целевого объекта в
Trace
классах иDebug
, каждая строка выходных данных будет дублироваться независимо от того, создает лиDebug
выходные данные илиTrace
.Dim tr1 As New TextWriterTraceListener(System.Console.Out) Debug.Listeners.Add(tr1) Dim tr2 As New TextWriterTraceListener(System.Console.Out) Trace.Listeners.Add(tr2)
Ссылки
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе:Отправить и просмотреть отзыв по