public void UpdateTraceInfo() { _type = TraceInfoType.TraceMessage; var re = new Regex(@"%(?<type>[sdhf])?(?<size>\d\d?)"); var matches = re.Matches(TraceString); _reformattedTrace = TraceString.Trim('"'); var offset = 2; // the trace id must not be read anymore! for (int i = 0; i < matches.Count; i++) { var nrOfBytes = int.Parse(matches[i].Groups["size"].Value) / 8; var localOffset = offset; _unpackParams.Add((data) => TraceMessageHandler.Unpack(data, localOffset, nrOfBytes)); offset += nrOfBytes; var replacement = string.Format("{{{0}:X02}}", i); _reformattedTrace = re.Replace(_reformattedTrace, replacement, 1); } EvalData = (x) => string.Format(_reformattedTrace, x); if (TraceString.Contains("@plot")) { _type = TraceInfoType.PlotData; EvalData = (x) => (double)Convert.ToDouble(x.First()); } }
/// <summary> /// Generate debug trace for variables or functions. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="type"></param> /// <param name="name"></param> /// <param name="column"></param> /// <param name="output"></param> /// <param name="input"></param> /// <returns></returns> internal static T Trace <T>(TraceInfoType type, Location location, string name, T output) { if (!CollectDebugData) { return(output); } location.Line += ShaderLineOffset; TraceLog.Add(new TraceInfo { Location = location, Type = type, Name = name, Output = output, }); return(output); }