Способ трассировки и отладки в Visual C#

Переводы статьи Переводы статьи
Код статьи: 815788 - Vizualiza?i produsele pentru care se aplic? acest articol.
Версия данной статьи для Microsoft Visual Basic .NET:313417.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается использованиеОтладкаиTraceКлассы. Эти классы доступны в Microsoft .NET Framework. Эти классы можно использовать для предоставления сведений о производительности приложения во время разработки приложения или после развертывания в рабочей среде. Эти классы являются только одна часть возможностей инструментальных средств, доступных в платформе .NET Framework.

Требования

В приведенном ниже списке перечислены требования к оборудованию, сети, программному обеспечению и пакетам обновления.:
  • Microsoft Windows 2000 или Microsoft Windows XP или Microsoft Windows Server 2003
  • Microsoft Visual C#
В данной статье также предполагается, что вы знакомы с отладки программ.

Описание групп технологии


Действия, описанные вСоздание образца с помощью класса Debugразделе демонстрируется создание консольного приложения, использующегоОтладкакласс для предоставления сведений о выполнении программы.

При запуске программы можно использовать методыОтладкакласс для создания сообщений, которые помогают отслеживать последовательность выполнения программы, для выявления неисправностей или для предоставления информации для измерения производительности. По умолчанию сообщения,ОтладкаСоздает класс отображаются в окне вывода Visual Studio интегрированной среды разработки (IDE).

В примере кода используетсяWriteLineметод, чтобы получить сообщение, заканчивающееся ограничителем строки. При использовании этого метода для получения сообщения, каждое сообщение выводится в отдельной строке в окне вывода.

При использовании командыУтверждениеметодОтладкакласс, в окне вывода отображается сообщение, только если указанное условие не выполняется. Сообщение также появляется в модальном диалоговом окне пользователя. Диалоговое окно содержит сообщение, имя проекта иМетод Debug.Assertномер выписки. Диалоговое окно также содержит следующие три кнопки:
  • Прервать выполнение:Выполнение приложения останавливается.
  • Повторите попытку.Приложение переходит в режим отладки.
  • Игнорировать:Приложение выполняется.
Пользователь должен нажать одну из этих кнопок, прежде чем приложение может продолжать.

Также можно направить выходные данныеОтладкакласс для назначения не в окне вывода. надписьюОтладкакласс имеет коллекцию с именемПрослушивателисодержитПрослушивательобъекты.

КаждыйПрослушивательобъект мониторовОтладкаВывод и направляет выходные данные для указанного целевого.

КаждыйПрослушивательВ диалоговом окнеПрослушивательКоллекция принимает любые выходные данные,ОтладкаСоздает класс. Если данный пользователь является членом домена, то при вводе имени пользователя используйте форматTextWriterTraceListenerкласс, определениеПрослушивательобъекты. Можно задать целиTextWriterTraceListenerКласс через конструктор.

Ниже перечислены некоторые возможные выходных данных целевых объектов.
  • В окне консоли с помощьюSystem.Console.OutСвойство.
  • Текстовый файл (.txt) с помощьюSystem.IO.File.CreateText("FileName.txt")оператор.
После созданияTextWriterTraceListenerобъект, который необходимо добавитьDebug.ListenersКоллекция для получения выходных данных отладки.

Создание образца с помощью класса Debug

  1. Запустите Visual Studio или Visual C#, экспресс-выпуск.
  2. Создайте новый проект консольное приложение Visual C# с именемconInfo. В Visual Studio .NET будет создан класс Class1. В Visual Studio 2005 создается Program.cs.
  3. Добавьте следующие пространства имен в верхней Class1 или Program.cs.
    using System.Diagnostics;
  4. Для инициализации переменных для хранения сведений о продукте, добавьте на приведенные ниже операторы объявленияОсновной номер:метод:
    string sProdName = "Widget";
    int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. Укажите сообщение, которое создает класс в качестве первого параметра вводаWriteLineметод. Нажмите сочетание клавиш CTRL + ALT + O, чтобы убедиться в том, что отображается в окне вывода.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Для удобства чтения, с помощьюОтступметод, чтобы задать отступ для последующих сообщений в окне «Вывод»:
    Debug.Indent();
  7. Чтобы отобразить содержимое выбранных переменных,WriteLineметод, как показано ниже:
    Debug.WriteLine("The product name is " + sProdName);
    Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
    Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
  8. Можно также использоватьWriteLineметод для отображения имен и имя класса для объекта отсутствует. Например, следующий код отображаетSystem.Xml.XmlDocumentпространство имен в окне «Вывод»:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
    Debug.WriteLine(oxml);
  9. Для систематизации выходных данных, можно включить параметр категории как необязательный второй ввода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.ToString(),"Field");
    Debug.WriteLine("Total Cost is  " + (iUnitQty * dUnitCost),"Calc");
  10. Окно вывода может отображать сообщения, только если назначенный условие имеет значение true с помощьюWriteLineIfметодОтладкаКласс:. Проверяемое условие — это первый параметр вводаWriteLineIfметод. Второй параметрWriteLineIfЭто сообщение, которое отображается, только если условие в первый параметр имеет значение true.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
    
  11. Если данный пользователь является членом домена, то при вводе имени пользователя используйте форматУтверждениеметодОтладкакласс таким образом, чтобы в окне вывода отображаются сообщения, только если заданное условие равно false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");
    Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
    
  12. СоздатьTextWriterTraceListenerобъекты в окне консоли (tr1) и текстовый файл с именем Output.txt (tr2), а затем добавить для каждого объектаПрослушиватели отладкиколлекции:
    TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
    Debug.Listeners.Add(tr1);
            
    TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
    Debug.Listeners.Add(tr2);
  13. Для удобства чтения, с помощьюОтменить отступметод для удаления отступа для последующих сообщенийОтладкаСоздает класс. При использовании командыОтступиОтменить отступметоды вместе, средство чтения различает выходные группы.
    Debug.Unindent();
    Debug.WriteLine("Debug Information-Product Ending");
  14. Чтобы убедиться, что каждыйПрослушивательЭтот объект получает все выходные данные, вызовСбросметодОтладкаКласс буферов:
    Debug.Flush();

Использование класса Trace

Можно также использоватьTraceкласс для создания сообщения, отслеживать выполнение приложения. надписьюTraceиОтладкаклассы, общий доступ к большей части те же методы для создания выходных данных, включая следующие:
  • WriteLine
  • WriteLineIf
  • Отступ
  • Отменить отступ
  • Утверждение
  • Сброс
Чтобы снять с данного каталога атрибут «Только чтение», можно воспользоваться командойTraceиОтладкаклассы отдельно или вместе в одном приложении. В проекте отладки конфигурации решения одновременноTraceиОтладкавыходные данные становятся активными. Проект создает выходные данные из обоих этих классов для всехПрослушивательобъекты. Тем не менее, только создает конфигурацию решения версии проекта выходные данныеTraceКласс:. Конфигурация решения версии проекта игнорирует любыеОтладкавызовы методов класса.
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();

Убедитесь, что действия

  1. Убедитесь, чтоОтладкаявляется текущей конфигурации решения.
  2. ЕслиВ обозревателе решенийокно не отображается, нажмите сочетание клавиш CTRL + ALT + L для отображения этого окна.
  3. Щелкните правой кнопкой мышиconInfoи выберите командуСвойства.
  4. В левой части окна свойств conInfo в группеconfigurationПапка, убедитесь, что стрелка указывает наУстранение неполадок.

    Примечание.В Visual C# 2005 и Visual C# 2005 Express Edition нажмите кнопкуОтладкаВ диалоговом окнеconInfoСтраница.
  5. ВышеconfigurationПапка, вconfigurationРаскрывающийся список, нажмите кнопкуАктивный (Отладка)-или-Отладкаи выберите командуOk.. В Visual C# 2005 и Visual C# 2005 Express Edition нажмите кнопкуАктивный (Отладка)-или-ОтладкаВ диалоговом окнеconfigurationв раскрывающемся спискеОтладкастраницы, а затем нажмите кнопкуСохранитьв менюФайл:меню.
  6. Для отображения окна Output нажмите сочетание клавиш CTRL+ALT+O..
  7. Нажмите клавишу F5 для выполнения кода. КогдаОшибка утвержденияОткроется диалоговое окно, нажмите кнопкуИгнорировать.
  8. В окне консоли нажмите клавишу ВВОД. Программа должна завершить, и в окне вывода должен отображать выходные данные, подобные приведенным ниже
        Debug Information-Product Starting 
        The product name is Widget
        The available units on hand are100
        The per unit cost is 1.03
        System.Xml.XmlDocument
        Field: The product name is Widget
        Field: The units on hand are100
        Field: The per unit cost is1.03
        Calc: Total Cost is  103
        This message WILL appear
        ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Message will appear since dUnitcost  < 1 is false
    ---- Assert Long Message ----
    
    
        at Class1.Main(String[] args)  <%Path%>\class1.cs(34)
    
        The product name is Widget
        The available units on hand are100
        The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting 
        The product name is Widget
        Field: The product name isWidget
        This message WILL appear
    Trace Information-Product Ending
                        
    
  9. В окне консоли и файл Output.txt должен отображать следующий результат:
    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 находится в одной папке с исполняемым conInfo (conInfo.exe). Как правило это папке \bin, в котором хранится исходный проект. По умолчанию это C:\Documents and Settings\Пользователя входа в систему\Мои документы\Visual studio Projects\conInfo\bin. В Visual C# 2005 и Visual C# 2005 Express Edition Output.txt файл расположен в следующей папке:
C:\Documents and Settings\Имя входа пользователя\Мои документы\Visual studio 2005\Projects\conInfo\conInfo\bin\Debug


Полный листинг кода

   using System;
   using System.Diagnostics;

   class Class1
   {
      [STAThread]
      static void Main(string[] args)
      {
         string sProdName = "Widget";
         int iUnitQty = 100;
         double  dUnitCost = 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.ToString());
         Debug.WriteLine("The per unit cost is "+ dUnitCost.ToString());

         System.Xml.XmlDocument oxml = 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.ToString(),"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 since dUnitcost  < 1 is false");

         TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
         Debug.Listeners.Add(tr1);
        
         TextWriterTraceListener tr2 = 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();
      }			
   }


Устранение неполадок

  • Если тип конфигурации решениявыпускнадписьюОтладкавыходные данные класса обрабатывается.
  • После созданияTextWriterTraceListenerкласс для определенной цели,TextWriterTraceListenerПолучает выходные данныеTraceиОтладкаКлассы. Это происходит независимо от того, используетсяДобавьте серверметодTraceилиОтладкаДобавляемый классTextWriterTraceListenerдляПрослушивателиКласс:.
  • При добавленииПрослушивателиобъект для одного и того же целевого объекта вTraceиОтладкаклассы, каждая строка выходных данных является повторяется, независимо от того, следует лиОтладка-или-TraceСоздает выходные данные.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
             Debug.Listeners.Add(myWriter);
            
             TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
             Trace.Listeners.Add(myCreator);
             
    

Ссылки

Дополнительные сведения содержатся в следующих разделах в .NET Framework Class Library документации:
Трассировка класса
.aspx HTTP://msdn2.Microsoft.com/en-us/library/System.Diagnostics.Trace (vs.71)

Класс отладки
.aspx HTTP://msdn2.Microsoft.com/en-us/library/System.Diagnostics.Debug (vs.71)

Свойства

Код статьи: 815788 - Последний отзыв: 23 сентября 2011 г. - Revision: 3.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Ключевые слова: 
kbprogramming kbdebug kbnamespace kbhowtomaster kbmt KB815788 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:815788

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com