1. Trace Markers Softwarespezifikation
TraceMarkers
19.1.2013, Andreas Kleffel
Bearbeitet 6.4. 2013
Trace Markers ist eine API, die es erlaubt .NET Assemblies auf Marker-Attribute
zu scannen. Marker-Attribute sind solche Attribute, die Metadaten in den Source
Code einweben und in der Regel zur Ausführung des Programms nicht nötig
sind. Beispiele für solche Metadaten wären:
Konzeptionelle Funktionen
Features
Akteure
Aspekte
Bugfixes
Workarounds
Sicherheitsrelevanter Code
…
Ein Marker-Attribut sollte dabei folgende Struktur aufweisen:
Einen eindeutigen, kollisionsfreien Namen, auch ohne Namespace
Einen Konstruktor, der das Attribut als Konstante einfügt
Ein Beispiel für ein gültiges Marker-Attribut wäre:
Ein Beispiel für das Einweben der Metadaten wäre dann:
-1-
2. Trace Markers Softwarespezifikation
Trace Markers wurde für das Tracing von Spezifikations-Funktionen im Source
Code konzipiert – sprich: System Composer (bei der Entwicklung noch
„DonkeySpecs“ genannt). Es ist jedoch eine eigenständige Komponente, die
nicht von System Composer abhängt.
Als Ergebnis eines Tracings/einer Analyse werden Klassen, Methoden /
Funktionen Markern zugewiesen. Das Marker-Objekt beinhaltet lediglich eine ID
(extrahiert aus dem Konstruktor oder einem Property des Marker-Attributes) und
ist somit für beliebige Marker einsetzbar:
Das eigentliche Tracing kann auf zwei Arten passieren:
Via Reflection
Via PDB (mit Hilfe der CCI, Common Compiler Infrastructure)
-2-
3. Trace Markers Softwarespezifikation
Die Analyse der Attribute via Reflection ist die erste nahe liegende Variante, die
mit .NET-Boardmitteln durchgeführt werden kann. Leider können damit nicht
die Quelldateien der Klassen ermittelt werden, weshalb eine zweite Strategie
die PDB-Dateien der untersuchenden Assembly mit einbezieht. Dazu wird das
Microsoft-Projekt Common Compiler Infrastructure: Metadata API verwendet.
1
Die PDB-Strategie ist prinzipiell langsamer, weshalb die Reflection-Strategie
weiterhin angeboten wird. Man kann auswählen, ob man den schnelleren und
oder detailierteren Analyzer benötigt.
Diese Analyzer-Klassen können per API direkt verwendet werden. Jedoch bietet
Trace Markers die Möglichkeit den Aufruf in einem separaten Workerprozess zu
bearbeiten, dadurch ist die Analyse vollständig vom Caller isoliert und ggf.
geladene Typen werden nach der Analyse wieder entladen.
Ablauf:
1
http://ccimetadata.codeplex.com/
-3-
4. Trace Markers Softwarespezifikation
Was kompliziert aussieht ist lediglich ein Methodenaufruf:
var result = IsolatedAnalysis.Run(runnerPath, link, AnalysisStrategy.CCI);
Zusammenfassung
Akteure
Anderes Programm, z.B. DonkeySpecs
Features
Analysieren von .NET-Assemblies auf Marker-Attribute in Klassen
und Methoden
Separater EXE-Runner zur isolierten Ausführung der Analyse
Einbeziehung von PDBs zur Zuordnung Source Location (File,
Line Number)
XML-API via Console.Out leicht abzufragen
(evtl. Caching von Analyse-Ergebnisssen)
Funktionen
Isolated Tracing
Simple Tracing
Reflection-basiertes Tracing
PE/PDB-basiertes Tracing
-4-