in Microsoft.Diagnostics.Tracing/TraceEvent/TraceEvent/40_SimpleTraceLog.cs [203:250]
static void ProcessData(string dataFileName)
{
Out.WriteLine("************** Creating a ETLX file for {0}", dataFileName);
// Note the OpenOrConvert will take an ETL file and generate an ETLX (right next to it) if it is out of date.
// We TraceLogOptions gives you control over this conversion. Here we spew the log file to the console
var traceLog = TraceLog.OpenOrConvert(dataFileName, new TraceLogOptions() { ConversionLog = Out });
Out.WriteLine("************** Done converting", Path.GetFileName(traceLog.FilePath));
// The OS process ID of this process
var myProcessID = Process.GetCurrentProcess().Id;
// Find myself in th trace.
var simpleTraceLogProcess = traceLog.Processes.LastProcessWithID(myProcessID);
Debug.Assert(simpleTraceLogProcess != null);
// Resolve symbols for clr and ntdll using the standard Microsoft symbol server path.
var symbolReader = new SymbolReader(Out, SymbolPath.MicrosoftSymbolServerPath);
foreach (var module in simpleTraceLogProcess.LoadedModules)
{
if (module.Name == "clr" || module.Name == "ntdll" || module.Name == "mscorlib.ni")
traceLog.CodeAddresses.LookupSymbolsForModule(symbolReader, module.ModuleFile);
}
// Source line lookup is verbose, so we don't send it to the console but to srcLookupLog (which we currently ignore)
var srcLookupLog = new StringWriter();
var silentSymbolReader = new SymbolReader(srcLookupLog, SymbolPath.MicrosoftSymbolServerPath);
silentSymbolReader.Options = SymbolReaderOptions.CacheOnly; // don't try to look things up on the network for source
silentSymbolReader.SecurityCheck = (pdbPath) => true; // for this demo we trust any pdb location. This lets us find the PDB of the demo itself
Out.WriteLine("******Looking for EXCEPTION EVENTS");
// Get all the exception events in
foreach (var exceptionData in (simpleTraceLogProcess.EventsInProcess.ByEventType<ExceptionTraceData>()))
{
Out.WriteLine("Found an EXCEPTION event in SimpleTraceLog: Type: {0} Message: {1}", exceptionData.ExceptionType, exceptionData.ExceptionMessage);
PrintStack(exceptionData.CallStack(), silentSymbolReader);
}
Out.WriteLine();
Out.WriteLine("******Looking for Microsoft-Demos-SimpleMonitor.Stop EVENTS");
foreach (var data in simpleTraceLogProcess.EventsInProcess)
{
if (data.ProviderName == "Microsoft-Demos-SimpleMonitor" && data.EventName == "Stop")
{
Out.WriteLine("Found an EVENTSOURCE event {0} at {1:f3} MSec into trace", data.EventName, data.TimeStampRelativeMSec);
PrintStack(data.CallStack(), silentSymbolReader);
}
}
}