MCTS 70-536 Study Group - Diagnostics

18
MCTS 70-536 Study Group Spotkanie 6: Diagnostics

Transcript of MCTS 70-536 Study Group - Diagnostics

Page 1: MCTS 70-536 Study Group - Diagnostics

MCTS 70-536 Study Group

Spotkanie 6: Diagnostics

Page 2: MCTS 70-536 Study Group - Diagnostics

Agenda

• Logowanie zdarzeń• Monitorowanie wydajności • Debug & Trace• WMI

Page 3: MCTS 70-536 Study Group - Diagnostics

MONITOROWANIE WYDAJNOŚCIMCTS 70-536 Study Group / Spotkanie 6

Page 4: MCTS 70-536 Study Group - Diagnostics

Metody statyczne klasy Process

• GetCurrentProcess():Process• GetProcessById(int, [string]):Process• GetProcesses([string]):Process[]• GetProcessesByName(string, [string]):Process[]• Start(ProcessStartInfo):Process• Start(string, [string]):Process• Start(string, [string], string, SecureString,

string):Process

Page 5: MCTS 70-536 Study Group - Diagnostics

Monitorowanie liczników

• Obiekty systemu operacyjnego– Klasy i instancje (np. CPU, wątek, pamięć)– Pseudoinstancja _Total

• Przykłady– # uchwytów używanych w procesie– # błedów stron/sek

• Dostęp:– Przystawka Performance Monitor (perfmon)– API (natywne/zarządzane)

Page 6: MCTS 70-536 Study Group - Diagnostics

Monitorowanie liczników (c.d.)

• Klasa PerformanceCounter : IDisposable – CategoryName– CounterName– InstanceName– MachineName– ReadOnly– Next{Value|Sample}– Increment– IncrementBy

Page 7: MCTS 70-536 Study Group - Diagnostics

Monitorowanie liczników (c.d.)

• PerformanceCounterCategory– MachineName– CategoryName– CategoryHelp– CategoryType = MultiInstance | SingleInstance– GetCounters():PerformanceCounter

Page 8: MCTS 70-536 Study Group - Diagnostics

DEBUG & TRACEMCTS 70-536 Study Group / Spotkanie 6

Page 9: MCTS 70-536 Study Group - Diagnostics

Klasa Debugger

• Działa tylko w trybie Debug• Metody– Break– IsAttached– IsLogging– Launch– Log

Page 10: MCTS 70-536 Study Group - Diagnostics

Atrybuty Debuggera

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

Page 11: MCTS 70-536 Study Group - Diagnostics

Klasa Debug i Trace c.d.

• Niemal identyczne• Oparte o wspólną infrastrukturę TraceListeners• Zależą od różnych falg (DEBUG i TRACE)• Statyczne metody/właściwości Debug i Trace– Assert – Fail– Write[Line][If]– Indent– AutoFlush– Flush i Close

Page 12: MCTS 70-536 Study Group - Diagnostics

Klasa Debug i Trace c.d.

• Statyczne metody Trace:– TraceError– TraceInformation– TraceWarning

Page 13: MCTS 70-536 Study Group - Diagnostics

Assert

• Dodatkowa dokumentacja• Pozwalają zachować stan• Jak sprawdzać?– Atomowe sprawdzenia– Bez efektów ubocznych – Kompletnie

• Co sprawdzać?– Parametry metod, setterów i indekserów– Otrzymywane wartości z wywołań

• CodeContracts

Page 14: MCTS 70-536 Study Group - Diagnostics

TraceSwitch i TraceListener

• TraceSwitch– Decyduje co ma być zalogowane zanim trafi do listenera

• TraceListener– Filtry– Wbudowane listenery

• DefaultTraceListener• TextWriterTraceListener• XmlWriterTraceListener• EventLogTraceListener• DelimitedListTraceListener

– Możliwość tworzenia własnych listenerów i ich filtrów

Page 15: MCTS 70-536 Study Group - Diagnostics

CorrelationManager

• Pozwala grupować logiczne bloki aktywności• Korzysta z Thread Local Storage• Hierarchiczny (LogicalOperationStack)• StartLogicalOperation• StopLogicalOperation• Udostępnia pole ActivityId

Page 16: MCTS 70-536 Study Group - Diagnostics

TraceSource

• Dedykowane źródła logów dla poszczególnych modułów aplikacji

• Możliwośc przekazywania dodatkowych danych do loga

• Szersza skala poziomów logowania

Page 17: MCTS 70-536 Study Group - Diagnostics

Trace Source A Trace Source B Trace Source C

Switch 1 Switch 2

Trace Listener A

Trace Listener B

Trace Filter 1

Trace Listener C

Trace Listener D

Trace Filter 2

Page 18: MCTS 70-536 Study Group - Diagnostics

Konfiguracja

• Poprzez API lub w app.config<system.diagnostics>

<sources><source …><listeners><add … /></listeners></source></sources><sharedListeners><add …/></sharedListeners><switches />

</system.diagnostics>