Jak sledování a ladění v jazyce Visual C#

Microsoft Visual Basic .NET verzi tohoto článku naleznete v tématu
313417 .
Tento článek odkazuje na následující obor názvů knihovny tříd rozhraní.NET Framework společnosti Microsoft:
  • System.Diagnostics

V TOMTO ÚKOLU

Souhrn

Tento článek popisuje způsob použití ladění a trasování třídy. Tyto třídy jsou k dispozici v Microsoft rozhraní.NET Framework. Tyto třídy můžete poskytnout informace o výkonu aplikace během vývoje aplikací nebo po zavedení do výroby. Tyto třídy jsou pouze jednu část funkce služby WMI, které jsou k dispozici v rozhraní.NET Framework.


zpět na horní

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack, které potřebujete:
  • Microsoft Windows 2000 nebo Microsoft Windows XP nebo Microsoft Windows Server 2003
  • Microsoft Visual C#
Tento článek také předpokládá, že jste obeznámeni s ladění programů.

zpět na horní

Popis techniky


Kroky v části vytvoření vzorku s třídou Debugukazují, jak vytvořit aplikace konzoly, která používá třída Debug poskytnout informace o provádění programu.


Při spuštění programu, můžete použít metody třídy Debug k vytvoření zpráv, které umožňují sledovat pořadí spouštění programu ke zjišťování poruch, nebo může poskytnout informace o měření výkonu. Ve výchozím nastavení zprávy, které generuje třídy Debug zobrazí v okně výstup z Visual Studio integrované vývojové prostředí (IDE).

Ukázkový kód používá metodu WriteLine k vytvoří zprávu, která následuje ukončení řádku. Při použití této metody k výrobě zprávu každé zprávy se zobrazí na samostatném řádku v okně výstup.

Při použití metody Assert třídy Debug okno výstup zobrazuje zprávu, pouze pokud zadaná podmínka vyhodnocen jako false. Tato zpráva se zobrazí v modálním dialogovým oknem uživateli. Dialogové okno obsahuje zprávy, název projektu a číslo výpisu příkazu Debug.Assert . Dialogové okno také obsahuje následující tři příkazová tlačítka:
  • Přerušení: Aplikace se zastaví.
  • Opakování: Aplikace přejde do režimu ladění.
  • Ignorovat: Aplikace pokračuje v činnosti.
Uživatel musí kliknout jedno z těchto tlačítek, před pokračováním v aplikaci.

Také může přesměrovat výstup z třídy Debug do jiných míst určení než okno výstup. Třída ladění má kolekce s názvem posluchače zahrnuje Listener objekty.

Každý objekt Listener sleduje Debug výstup a nasměruje výstup do zadaného cíle.


Každý posluchače do kolekce posluchačů přijme jakýkoli výstup, který generuje třídy ladění . TextWriterTraceListener třída slouží k definování objektů posluchače . Můžete určit cílové třídy TextWriterTraceListener prostřednictvím jeho konstruktor.

Některé možné výstup cílů patří:
  • Okna konzoly pomocí vlastnosti System.Console.Out .
  • Text (TXT) soubor pomocí příkazu System.IO.File.CreateText("FileName.txt") .
Po vytvoření objektu TextWriterTraceListener musíte přidat objekt do kolekce Debug.Listeners Chcete-li získat výstup ladění.

zpět na horní

Vytvoření příkladu s pomocí Debug Třídy

  1. Spusťte aplikaci Visual Studio nebo Visual C# Express Edition.
  2. Vytvořte nový projekt Visual C# konzolové aplikace s názvem conInfo. Class1 je vytvořen v aplikaci Visual Studio .NET. V aplikaci Visual Studio 2005 je vytvořena program.cs.
  3. Nahoře v Class1 nebo Program.cs přidejte následující obor názvů.
    using System.Diagnostics;
  4. Inicializovat proměnné obsahují informace o produktu, přidáte následující příkazy deklarace metody Main :
    string sProdName = "Widget";int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. Jako první vstupní parametr metody WriteLine zadejte zprávu vypočítávající třídy. Stiskněte kombinaci kláves CTRL + ALT + O a ujistěte se, že je viditelné okno výstup.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Pro čitelnost použijte metodu Odsazení odsazení dalších zpráv v okně výstup:
    Debug.Indent();
  7. Chcete-li zobrazit obsah vybrané proměnné, použijte WriteLine metoda takto:
    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. Metoda WriteLine můžete také zobrazit obor názvů a název třídy pro existující objekt. Například následující kód zobrazí obor názvů System.Xml.XmlDocument v okně výstup:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();Debug.WriteLine(oxml);
  9. Pokud chcete uspořádat výstup, můžete zahrnout kategorii jako volitelný, druhý vstupní parametr metody WriteLine . Pokud zadáte kategorii, je formát zprávy výstup okna "kategorie: zpráva." Například první řádek následující kód zobrazí "pole: název produktu je pomůcku" v okně výstup:
    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. Okno výstup umožňuje zobrazit zprávy pouze v případě, že určené podmínka vyhodnocena jako true pomocí WriteLineIf metody třídy Debug . Podmínka pro vyhodnocení je první vstupní parametr metody WriteLineIf . Druhý parametr WriteLineIf je zpráva, která se zobrazí, pouze pokud je podmínka v první parametr vyhodnocen jako true.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");

  11. Použijte metodu Assert třídy ladění , takže okno výstup zobrazuje zprávu, pouze pokud zadaná podmínka vyhodnocen jako false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");

  12. Vytvořit objekty TextWriterTraceListener okno Konzola (tr1) a textový soubor s názvem výstup.txt (tr2) a potom přidat každý objekt do kolekce Posluchačů ladění :
    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. Pro čitelnost, použijte metodu Unindent odeberte odsazení u dalších zpráv
    Generuje třídy ladění . Při použití Odsazení a Unindent metod dohromady, mohou čtenáře rozlišit výstup jako skupina.
    Debug.Unindent();Debug.WriteLine("Debug Information-Product Ending");
  14. A ujistěte se, že každý objekt Listener obdrží svůj výstup, volání metody Flush pro třídu Debug vyrovnávací paměti:
    Debug.Flush();
zpět na horní

Použití Trace třídy

Můžete také trasování třídy k vytvoření zprávy sledující spuštění aplikace. Trasování a ladění třídy sdílet většinu stejných metod vyprodukovat výstup, včetně následujících:
  • WriteLine
  • WriteLineIf
  • Zvětšit odsazení
  • Zrušit odsazení
  • Vyhodnocení
  • Vyprázdnění
Můžete trasování a ladění tříd samostatně nebo společně ve stejné aplikaci. V konfiguraci ladění řešení projektu Sledování a ladění výstupu jsou aktivní. Projekt generuje výstup z obou těchto tříd všechny objekty Listener . Konfigurace řešení Release projektu však generuje pouze výstup z třídy trasování . Konfigurace řešení Release projektu ignoruje všechny vyvolání metody třídy ladění .
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();

zpět na horní

Ověřte, zda funguje

  1. Ujistěte se, že ladění je aktuální konfigurace řešení.
  2. Pokud není zobrazeno okno Průzkumník řešení , stiskněte kombinaci kláves CTRL + ALT + L k zobrazení tohoto okna.
  3. ConInfoklepněte pravým tlačítkem myši a potom klepněte na tlačítko
    Vlastnosti.
  4. V levém podokně na stránce vlastností conInfo ve skupinovém rámečku
    Konfigurace složky, ujistěte se, že šipka ukazuje na
    Ladění.

    Poznámka: V aplikaci Visual C# 2005 a Visual C# 2005 Express Edition klepněte na tlačítko ladění na stránce conInfo .
  5. Výše uvedené složce Konfigurace v
    Konfigurace rozevírací seznam, klepněte na položku aktivní (ladění) nebo laděnía potom klepněte na tlačítko
    OK. V aplikaci Visual C# 2005 a Visual C# 2005 Express Edition klepněte na položku aktivní (ladění) nebo v poli Konfigurace rozevíracího seznamu na stránce ladění ladění a klepněte na tlačítko Uložit v nabídce soubor .
  6. Stiskněte kombinaci kláves CTRL + ALT + O zobrazit okno výstup.
  7. Stisknutím klávesy F5 spustit kód. Když
    Chyba při vyhodnocení dialogové okno, klepněte na tlačítko
    Ignorovat.
  8. V okně konzoly stiskněte klávesu ENTER. Program by měly být dokončeny a okno Výstup by měl zobrazit výstup podobný následujícímu
        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. Okna konzoly a souboru výstup.txt by měl zobrazit následující výstup:
    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

Poznámka: Výstup.txt soubor je umístěn ve stejném adresáři jako spustitelný soubor conInfo (conInfo.exe). Obvykle je to \bin složku pro uložení zdroje projektu. Ve výchozím nastavení toto je C:\Documents and Settings\uživatelské přihlašovacíDocuments\Visual Studio Projects\conInfo\bin. V aplikaci Visual C# 2005 a Visual C# 2005 Express Edition výstup.txt soubor je umístěn v následující složce:
C:\Documents and Settings\uživatelské přihlašovacíDocuments\Visual Studio 2005\Projects\conInfo\conInfo\bin\Debug.


zpět na horní

Úplný výpis kódu

   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();
}
}


zpět na horní

Poradce při potížích

  • Pokud je typ konfigurace řešení Release, výstup ladění třídy je ignorována.
  • Po vytvoření třídy TextWriterTraceListener pro konkrétní cíl TextWriterTraceListener přijme výstup trasování a ladění tříd. K tomu dochází bez ohledu na to, zda použít metodu Add Trace nebo Debug třídy přidat TextWriterTraceListener třídy posluchače .
  • Pokud přidáte objekt posluchače pro stejný cíl v trasování a ladění tříd, každý řádek výstupu je duplicitní, bez ohledu na to, zda
    Ladění a trasování generuje výstup.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);         Debug.Listeners.Add(myWriter);

    TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
    Trace.Listeners.Add(myCreator);


zpět na horní

Odkazy

Další informace naleznete v následujících tématech v dokumentaci knihovny tříd rozhraní.NET Framework:zpět na horní
Vlastnosti

ID článku: 815788 - Poslední kontrola: 16. 1. 2017 - Revize: 2

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

Váš názor