Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержатся сведения об использовании Debug Trace классов в Visual Basic .NET.
Исходная версия продукта: Visual Basic .NET
Исходный номер базы знаний: 313417
Итоги
В этой статье показано, как использовать Debug классы и Trace классы. Эти классы доступны в Microsoft платформа .NET Framework. Эти классы можно использовать для предоставления сведений о производительности приложения во время разработки приложений или после развертывания в рабочей среде. Эти классы являются только одной частью функций инструментирования, доступных в платформа .NET Framework.
Требования
В следующем списке описаны рекомендуемые аппаратные средства, программное обеспечение, сетевая инфраструктура и пакеты обновления.
- Windows
- Visual Basic .NET
В этой статье также предполагается, что вы знакомы с отладкой программы.
Описание метода
Действия, описанные в разделе "Создание примера" с разделом " Класс отладки", демонстрируют создание консольного приложения, использующего Debug класс для предоставления сведений о выполнении программы.
При запуске программы можно использовать методы Debug класса для создания сообщений, которые помогают отслеживать, обнаруживать неисправности или предоставлять сведения о измерении производительности. По умолчанию сообщения, создаваемые Debug классом, отображаются в окне вывода интегрированной среды разработки (IDE) Microsoft Visual Studio.
В примере кода WriteLine используется метод для создания сообщения, за которым следует терминатор строки. При использовании этого метода для создания сообщения каждое сообщение отображается в отдельной строке в окне вывода.
Если вы используете Assert метод Debug класса, окно вывода отображает сообщение только в том случае, если указанное условие оценивается как false. Сообщение также отображается в модальном диалоговом окне для пользователя. Диалоговое окно содержит сообщение, имя проекта и номер инструкции Debug.Assert . Диалоговое окно также включает три кнопки команд:
- Прерывание: приложение перестает работать.
- Повторите попытку: приложение вводит режим отладки.
- Игнорировать: приложение продолжается. Пользователь должен щелкнуть одну из этих кнопок, прежде чем приложение сможет продолжить работу.
Вы также можете направлять выходные Debug данные из класса в назначения, отличные от окна вывода. Класс Debug имеет коллекцию с именем Listeners , включающую объекты прослушивателя. Каждый объект прослушивателя отслеживает 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метода. Если указать категорию, формат сообщения окна вывода — "категория: сообщение". Например, в первой строке следующего кода отображается поле "Поле: имя продукта — мини-приложение" в окне вывода: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")Используйте метод
DebugAssert класса, чтобы окно вывода отображалось сообщение, только если указанное условие оценивается как false:Debug.Assert(dUnitCost > 1, "Message will NOT appear") Debug.Assert(dUnitCost < 1, "Message will appear")TextWriterTraceListenerСоздайте объекты для окна консоли (tr1) и текстового файла с именем Output.txt (tr2), а затем добавьте каждый объект в коллекциюDebugListeners: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. При совместном использованииIndentUnindentметодов средство чтения может различать выходные данные как группы.Debug.Unindent() Debug.WriteLine("Debug Information-Product Ending")Чтобы убедиться, что каждый объект Прослушивателя получает все выходные данные, вызовите
Flushметод дляDebugбуферов классов:Debug.Flush()
Использование класса Trace
Класс также можно использовать Trace для создания сообщений, отслеживающих выполнение приложения. Debug Классы Trace используют большинство методов для создания выходных данных, в том числе:
WriteLineWriteLineIfIndentUnindentAssertFlush
Классы можно использовать Trace Debug отдельно или вместе в одном приложении. В проекте Trace конфигурации решения отладки оба и Debug выходные данные активны. Проект создает выходные данные обоих из этих классов для всех объектов Прослушивателя. Однако проект конфигурации решения выпуска создает только выходные 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класс.При добавлении объекта Прослушивателя для одного и того же целевого объекта в
TraceDebugклассах каждая строка выходных данных дублируется независимо от того, создает ли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)