„Szoftverfejlesztés .NET platformon - Jegyzet 10. fejezet” változatai közötti eltérés
Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|MCP70-536Instrumentation}} 70-536 .NET framework 2.0 Application Development Foundation %TOC{depth="3"}% ==Alkalmazás nyomon követé…” |
a David14 átnevezte a(z) Instrumentation lapot a következő névre: Szoftverfejlesztés .NET plattformon - Jegyzet 10. fejezet |
(Nincs különbség)
|
A lap 2013. február 5., 23:05-kori változata
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
70-536 .NET framework 2.0 Application Development Foundation
%TOC{depth="3"}%
Alkalmazás nyomon követése
Logolás
Az alkalmazások bejegyzéseket helyezhetnek el a központi windowsos eseménynaplóban. Cserébe oda kell figyelni, hogy =EventLog= objektumokat soha ne adjunk át kevésbé megbízható kódnak. A legjobb, ha a részlegesen megbízható kód egyáltalán nem kap
EventLogPermission
-t. A logolás erőforrásigényes művelet, úgyhogy csínján kell bánni vele.
Log bejegyzések felvétele, visszaolvasása és törlése
- Log típusa lehet =EventLogEntryType.Error=, =FailureAudit=, =SuccessAudit=, =Warning= és =Information=.
- Bejegyzés hozzáadása
EventLog demoLog = new EventLog("demo"); demoLog.Source = "demo"; demoLog.WriteEntry("CreateEventLog called", EventLogEntryType.Information);
- Bejegyzések olvasása
EventLog demoLog = new EventLog(); demoLog.Log = "demo"; foreach (EventLogEntry demoEntry in demoLog.Entries) Console.WriteLine(demoEntry.Source + ": " + demoEntry.Message);
- Log kiürítése
EventLog demoLog = new EventLog("demo"); demoLog.Source = "demo"; demoLog.Clear();
- Log törlése: =EventLog.Delete("demo")=
Beépített logok:
- =Application=: =EventLog myLog = new EventLog("Application", machineName, applicationName);=
- =System=: =EventLog myLog = new EventLog("System")=
- =Security=
- saját: a =Source= attribútumot később nem lehet megváltoztatni.
Ha már létezik a log, kapcsolódik hozzá
Debuggolás
=Debugger= osztály
- =Break()=: breakpointként működik, jól használható breakpoint feltételes elhelyezéséhez
- =IsAttached=: hozzá van-e csatolva a processzhez
- =IsLogging=: most éppen logol-e
- =Launch()=: elindítja és processzhez csatolja a debuggert
- =Log()=: küld egy üzenetet a csatolt debuggernek, ha létezik. Az üzenet a listenereknek továbbítódik.
=Debug= osztály
- =Assert(feltétel)=: ellenőrzi a feltételt, és kiír egy üzenetet, ha nem teljesült
- =Flush=, =Close=
- =Fail=: hibaüzenetet ír ki
- =Indent=, =Unindent=: behúzás (xml-be logoláskor)
- =Print=: üzenetet ír ki a listenekre
- =Write[Line][If]=: VS Output ablakába ír (Debug ill. Trace listenereknek küld üzenetet)
Debugger attribútumok
- =[DebuggerBrowsable]=: mit mutasson a tagváltozóból
- értékei: =DebuggerBrowsableState.Never=, =Collapsed=, =RootHidden=
- =[DebuggerDisplay]=: =ToString()= debuggeres megfelelője, ez jelenik meg a struktúra becsukásakor.
Pl. =[DebuggerDisplay("CompanyName = {_companyName}, CompanyCity{_companyCity}")]=
- =[DebuggerHidden]=: breakpointnál nem áll meg
- =[DebuggerNonUserCode]=
- ...
=Trace= osztály: release módban is működik
- =AutoFlush=, =Close=, =Flush=
- =Indent=, =Unindent=
- =Listener= (lehet =DefaultTraceListener=, =TextWriterTraceListener=, =XmlWriterTraceListener=, =ConsoleTraceListener=, ...)
- =Write[Line][If]=
- ...
Listenerek
Listener regisztrálása
A regisztráció végezhető kódból vagy
app.config
-ból.
TraceSource demoTrace = new TraceSource("DemoApp"); demoTrace.Listeners.Add(new ConsoleTraceListener()); demoTrace.Switch = new SourceSwitch("DemoApp.Switch", "Information"); // logolási szint demoTrace.TraceInformation("Before writing to Console"); Console.WriteLine("Writing to the Console"); demoTrace.TraceInformation("After writing to Console");
vagy
a =configuration/system.diagnostics/trace/listeners= csoportot kell bővíteni.
Listenerek típusai
- =DefaultTraceListener=: az Output ablakhoz kapcsolódik
- =TextWriterTraceListener=: szöveges file-ba vagy streambe írja az üzeneteket
- =XmlWriterTraceListener=: XML-be logol.
- =EventLogTraceListener=: windowsos Event Logot hízlalja
A =CorrelationManager= osztály segít több logikailag elkülönülő trace-t kezelésében.
Teljesítmény monitorozása
A =PerformanceCounter= komponens a Windows Forms toolbox Components szakaszában található. A Windowsban rengeteg beépített counter található, a legtöbb erőforrás állapota mérhető velük. Egy
PerformanceCounter
-t azonosít:
- Computer name
- Category name
- Category instance
- Counter name
Létrehozáskor át kell adni egy =CounterCreationData= objektumot, ami tartalmazza a counter rövid és hosszú nevét, illetve a típusát. Az egyedi counterek az =PerformanceCounterCategory= osztállyal rendezhetők csoportokba. A =PerformanceCounterCategory= 5 statikus metódussal rendelkezik:
- =Create()=
- =Delete()=
- =Exists()=
- =GetCategories()=
- =ReadCategory()=
Példa:
private static PerformanceCounter HeapCounter = null; private static PerformanceCounter ExceptionCounter = null; private static Timer DemoTimer = new Timer(3000); HeapCounter = new PerformanceCounter(".NET CLR Memory", "# Bytes in all Heaps"); HeapCounter.InstanceName = "_Global_"; ExceptionCounter = new PerformanceCounter(".NET CLR Exceptions", "# of Exceps Thrown"); ExceptionCounter.InstanceName = "_Global_"; Console.WriteLine("# of Bytes in all Heaps : " + HeapCounter.NextValue().ToString()); Console.WriteLine("# of Framework Exceptions Thrown : " + ExceptionCounter.NextValue().ToString());
Stack nyomon követése
A =StackTrace= osztálytól kérdezhető le a stack aktuális állapota, azaz a
StackFrame
-ek listája.
Exception elkapásakor a =StackTrace= property-jéből lekérdezhető az exception bekövetkezésekor a stack állapota.
Processzek
=Process= osztály
- =GetCurrentProcess()=
- =GetProcesses()=: összes futó processz felsorolása
- =GetProcessByName()=
- =GetProcessById()=
Processz indítása: =Process.Start(new ProcessStartInfo(file))=. A =ProcessStartInfo= property-i:
- =FileName=
- =Arguments=
- =UserName=: melyik felhasználó nevében fusson
- =Password=: biztonsági okokból =SecureString= osztályban kell tárolni
- =UseShellExecute=: ha másik felhasználó nevében akarjuk indítani, false-ra kell állítani
Windows Management Instrumentation
A =System.Management= névtérben található. Windowst lehet vele scriptelni. El tudjuk vele érni azokat a windowsos objektumokat, amit a menedzselt környezetből nem lehetne.
- logikai lemezmeghajtók
- hálózati adapterek
- pause-olt service-ek
Fel lehet iratkozni a management eseményekre is:
- létre kell hozni egy =ManagementEventWatcher= objektumot
- ki kell tölteni a query-t
- meghívni a =WaitForNextEvent()= metódusát
- a =Stop()= metódussal leállítani a figyelést
EventQuery demoQuery = new EventQuery(); demoQuery.QueryString = "SELECT * FROM __InstanceCreationEvent WITHIN 2 " + "WHERE TargetInstance isa \"Win32_Service\" AND TargetInstance.State = 'Paused'"; ManagementEventWatcher demoWatcher = new ManagementEventWatcher(demoQuery); demoWatcher.Options.Timeout = new TimeSpan(0, 0, 10); Console.WriteLine("Open an application to trigger WaitForNextEvent"); ManagementBaseObject Event = demoWatcher.WaitForNextEvent(); demoWatcher.Stop();
-- Peti - 2007.06.27.