Skip Navigation Links.
Skip Navigation Links.

.net student

microsoft

Vyhledávání v obsahu portálu


Přihlášení uživatele

Přihlášení uživatele

Členové:
  • Poslední nový uživatel Poslední: liborsky
  • Nový dnes Dnes nových 1
  • Nový včera Včera nových: 0
  • Počet uživatelů: Celkem: 4708
Lidé online:
  • Návštěvníci: Návštěvníků: 19
  • Registrovaných Členů: 0
  • Celkem Celkem: 19
Mapa Stranek

MCTS 7. díl - Nástroje

Tento díl bude věnovaný nástrojům a technikám, které se používají pro logování, debuggování, trasování a práci s WMI. Určitě každý programátor v začátcích své "kariéry" používal pomocné výpisy typu "Console.WriteLine("...")" a když aplikace fungovala, nezbylo nic jiného než projít zdrojový kód a pomocné výpisy odstranit. My se ovšem podíváme na lepší způsob pomocných "výpisů", která nám nabízí třída Debug a Trace. V další fázi článku se obeznámíme s logování pomocí třídy EventLog a na závěr si ukážeme jak třeba zjistit všechny spuštěné windows služby pomocí WMI.

Stránky článku

Debug

Na následujícím ukázkovém příkladě si ukážeme jednotlivé metody této třídy. Nejprve si vytvoříme třídu Osoba

public class Osoba
{
    private string m_Jmeno;
    private string m_Prijmeni;

    public Osoba(string jmeno, string prijmeni)
    {
        m_Jmeno = jmeno;
        m_Prijmeni = prijmeni;
    }

    public string Jmeno
    {
        get { return m_Jmeno; }
        set { m_Jmeno = value; }
    }
    public string Prijmeni
    {
        get { return m_Prijmeni; }
        set { m_Prijmeni = value; }
    }
}

Na této třídě není zatím nic zvláštního. V metodě main vytvoříme novou instanci Osoby

Osoba novaOsoba = new Osoba("Ja", "3");
novaOsoba = null;
Debug.Assert(novaOsoba != null, "instance tridy Osoba je NULL");

instanci nastavíme schválně na null, aby jsme mohli využít první metodu ze třídy Debug, kterou je Assert. Tato metoda přijímá 2(3) parametry. Prvním parametrem je podmínka, která když nabyde hodnoty false, vyvolá se dialogové okno s naším popisem, který předáme jako druhý parametr. Třetí parametr je detailnější popis. Dialogové okno vypadá následovně

 

Po kliknutí na tlačítko Retry se přepneme do kódu a můžeme naší chybu rychle napravit. jestliže by jsme si ovšem nechtěli zobrazovat pořád podobná okna a vystačíme si jenom z výpisy, využijeme metody Write, WriteLine, které vypíší danou zprávu, či metody WriteIf, WriteLineIf, které také vypíši danou zprávu, ale už na základě dané podmínky

Osoba novaOsoba = new Osoba("Ja", "3");
Debug.Assert(novaOsoba != null, "instance tridy Osoba je NULL");
Debug.WriteLineIf(novaOsoba.Jmeno.Equals("Ja"), "jsem to opravdu Ja");

Pokud si zobrazíme okno Output, uvidíme v něm opravdu text "jsem to opravdu Ja"

Nyní se dostáváme k Debug atributům. Je jich celá řada, ale mě osobně nejvíce zaujali první tři:

  • DebuggerBrowsableAttribute
  • DebuggerDisplayAttribute
  • DebuggerHiddenAttribute
  • DebuggerNonUserCodeAttribute
  • DebuggerStepperBoundaryAttribute
  • DebuggerStepThroughAttribute
  • DebuggerTypeProxyAttribute
  • DebuggerVisualizerAttribute

Všechny atributy si ukážeme vždycky na příkladech před a po.

DebuggerBrowsableAttribute

Před Po
 

Určitě jste si všimnuli změny a teď zůstává pouze otázkou jak se toho docílilo. Pokud máme ve tříde privátní proměnné a k ním odpovídající vlastnosti, je tedy nepotřebný aby jsme hodnoty měli zobrazené dvakrát, proto tedy využijeme DebuggerBrowsableAttribute

[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string m_Jmeno;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string m_Prijmeni;

Ovšem v takto triviální třídě by jsme ještě mohli chtít aby se nám místo {Osoba} zobrazilo přímo jméno a příjmené, něco ve smyslu Jmeno="Ja", Prijmeni="3". Využijeme tedy druhý v pořadí atribut s názvem DebuggerDisplayAttribute a naší třídu uprávíme takto

[DebuggerDisplay("Jmeno = {m_Jmeno}, Prijmeni = {m_Prijmeni}")]
public class Osoba

Nyní už nevidíme v hodnotě Value pouze {Osoba}, ale

Představme si, že krokujeme náš příklad a po vytvoření instance budeme chtít změnit příjmení, takže klasicky předáme naší vlastnosti Prijmeni novou hodnotu. Když si pak budeme krokovat kód tak po zmáčknutí F11 (krok vpřed), se dostaneme do vlastnosti, přesněji do části set, kde se provede nastavení. Chceme -li tot přeskočit, můžeme využít F10, který do vlastnosti nevstiupí a přeskočí jí. Ovšem stejné funkcionality můžeme dosáhnout i při krokování F11 a to využitím DebuggerHiddenAttributu

[DebuggerHidden()]
public Osoba(string jmeno, string prijmeni)
{
    m_Jmeno = jmeno;
    m_Prijmeni = prijmeni;
}

Tahle úprava konstruktoru zajistí, že při krokování nám Debugger nevkročí do konstruktoru, ale pokračuje dál. Pokud je naše aplikace hotová a release verze vydána tak všechny Debug a Debugger "značky" jsou ignorovány!!!

Trace

Tato třída je vhodná pro trasovací výpisy, které si můžeme nechat zobrazit ve standardním Output okně (DefaultTraceistener), uložit do textového souboru (TextWriterTraceListener), xml souboru (XmlWriterTraceListener), či EventLogu (EventLogTraceListener) Nastavení našeho trasování můžeme provést v kódu

Trace.Listeners.Clear();
TextWriterTraceListener text = new TextWriterTraceListener("trace.txt");
Trace.Listeners.Add(text);
Trace.AutoFlush = true;

nebo pro mě "hezčím" způsobem přímo v konfiguračním souboru

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="MujListener"
             type="System.Diagnostics.TextWriterTraceListener"
             initializeData="trace.txt"/>
        <remove name="default"/>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Jakmile v kódu zavoláme metodu Trace.WriteLine("zprava"), provede se její zápis do souboru trace.txt.

Lukáš Kubis :: 28. října 2008 :: 576 shlédnutí :: 0 komentářů
kategorie: Obecná .Net témata, Vývoj Windows aplikací

Comments

Nyní zde nejsou žádné kometáře. Buďte první!
Musíte být přihlášen pro posílání komentářů. Přihlásit se můžete zde
Přehled posledních diskuzí

Přehled posledních diskuzí

  1. ASP.NET programátor zlín [12.16.2008 10:17 odp.]
    Dobrý den,v současné době hledáme programátora na pozici: ASP.NET / C# programátor - Zlín Požadavky: schopnost sam...
  2. RE: MS Fest video [12.08.2008 6:20 odp.]
    AhojVideo záznam bude, po večerech pilně pracujeme na jeho stříhání. Po dokončení se zde určitě vyskytne link na stažení...
  3. MS Fest video [12.04.2008 4:18 odp.]
    Existuje videozáznam z MS Festu konaneho (koncem listopadu 2008) o vikendu na Male Strane na fakulty MFF? Je nekde mozne...
  4. Práce pro programátora [11.25.2008 10:12 dop.]
    Hledám nadšeného programátora na vytvoření webstránek online tv/stream video. V případě zájmu pište na email: projekt@tr...
Novinky z klubů

Novinky z klubů

  1. Programátorské večery: F# 15. prosince 2008
    Ve čtvrtek 18.12.2008 se v rámci programátorských večerů uskuteční přednáška n...
  2. Programátorské večery: VSTO 10. prosince 2008
    Nad kancelářským balíkem MS Office se dají tvořit rozsáhlé aplikace. Od jednod...
  3. Programátorské večery: .NET 4.0 3. prosince 2008
    Zajímá Vás, na co se můžete těšit v nové verzi .NETu? Pak se přijďte podívat n...
  4. Záznamy z programátorských večerů 3. prosince 2008
    Záznamy z prog. večerů (prezentace+dema, občas i nějaké to video) můžete dočasně najít na http://ci...
Co se píše jinde

Co se píše jinde

Windows 7 Beta k dispozici pro MSDN předplatitele

Windows 7 Beta k dispozici pro MSDN předplatitele

Silverlight 2 úvod

Zajímá vás psaní webových aplikací na straně klienta ve vašem oblíbeném nástroji v .NETu? Slyšeli jste o Silverlightu...

PF 2009

Co tak popřát čtenářům programátorského blogu do nového roku? Snad abyste dostávali rozumná zadání a nemuseli tenkou ...

TypeConvertery

V tomto díle si vysvětlíme, co jsou TypeConvertery a k čemu se používají. To si také ukážeme na příkladu.

Atributy jmenného prostoru System.ComponentModel

V tomto článku si ukážeme jak efektivně využívat atributy z jmenného prostoru System.ComponentModel při vytváření vla...