Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/clog/TraceEmitterModules/CLogSTDOUT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ public void FinishedProcessing(CLogOutputInfo outputInfo, StringBuilder header,
bool emittedHeader = false;
public void TraceLineDiscovered(string sourceFile, CLogOutputInfo outputInfo, CLogDecodedTraceLine decodedTraceLine, CLogSidecar sidecar, StringBuilder macroPrefix, StringBuilder inline, StringBuilder function)
{
string clean;

CLogFileProcessor.DecomposedString clean;
CLogFileProcessor.CLogTypeContainer[] types = CLogFileProcessor.BuildTypes(decodedTraceLine.configFile, null, decodedTraceLine.TraceString, null, out clean);
CLogExportModuleDefination moduleSettings = decodedTraceLine.GetMacroConfigurationProfile().FindExportModule(ModuleName);

Expand Down
2 changes: 1 addition & 1 deletion src/clog2text/clog2text_windows/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ private static int Main(string[] cmdLineArgs)
argMap = sidecar.GetTracelineMetadata(bundle, "MANIFESTED_ETW");
}

var types = CLogFileProcessor.BuildTypes(sidecar.ConfigFile, null, bundle.TraceString, null, out string clean);
var types = CLogFileProcessor.BuildTypes(sidecar.ConfigFile, null, bundle.TraceString, null, out CLogFileProcessor.DecomposedString clean);

if (0 == types.Length)
{
Expand Down
4 changes: 2 additions & 2 deletions src/clogutils/CLogConsoleTrace.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ public static void DecodeAndTraceToConsole(StreamWriter outputfile, CLogDecodedT
}
}

string clean;
CLogFileProcessor.DecomposedString decompString;

CLogFileProcessor.CLogTypeContainer[] types = CLogFileProcessor.BuildTypes(config, null, bundle.TraceString, null, out clean);
CLogFileProcessor.CLogTypeContainer[] types = CLogFileProcessor.BuildTypes(config, null, bundle.TraceString, null, out decompString);

if (0 == types.Length)
{
Expand Down
7 changes: 4 additions & 3 deletions src/clogutils/CLogDecodedTraceLine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class CLogDecodedTraceLine
[JsonProperty] public Dictionary<string, Dictionary<string, string>> ModuleProperites = new Dictionary<string, Dictionary<string, string>>();

public CLogDecodedTraceLine(string uniqueId, string sourceFile, string userString, string userStringNoPrefix, CLogLineMatch m, CLogConfigurationFile c,
CLogTraceMacroDefination mac, CLogFileProcessor.CLogVariableBundle[] args, string cleanedString)
CLogTraceMacroDefination mac, CLogFileProcessor.CLogVariableBundle[] args, CLogFileProcessor.DecomposedString decompString)
{
SourceFile = sourceFile;
macro = mac;
Expand All @@ -35,13 +35,14 @@ public CLogDecodedTraceLine(string uniqueId, string sourceFile, string userStrin
TraceString = userString;
splitArgs = args;
TraceStringNoPrefix = userStringNoPrefix;
CleanedString = cleanedString;
DecomposedString = decompString;
}

[JsonProperty]
public string TraceString { get; private set; }

public string CleanedString { get; private set; }
public CLogFileProcessor.DecomposedString DecomposedString;
public string CleanedString { get { return DecomposedString.AsManifestedETWEncoding; } }

public string TraceStringNoPrefix { get; private set; }

Expand Down
3 changes: 1 addition & 2 deletions src/clogutils/CLogEncodingCLogTypeSearch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ public class CLogEncodingCLogTypeSearch

public bool IsEncodableArg
{
get
{
get {
return !Synthesized &&
(EncodingType != CLogEncodingType.UniqueAndDurableIdentifier &&
EncodingType != CLogEncodingType.UserEncodingString);
Expand Down
94 changes: 88 additions & 6 deletions src/clogutils/CLogFileProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,16 +171,90 @@ private static string[] SplitWithEscapedQuotes(string info, char splitChar)
return ret.ToArray();
}


public class DecomposedString
{
public void AddEncoding(EncodingArg arg)
{
encodings.Add(arg);
}

public EncodingArg CreateNewArg()
{
EncodingArg arg = new EncodingArg();
encodings.Add(arg);
return arg;
}
public class EncodingArg
{
public string Prefix { get; set; } = "";
public CLogEncodingCLogTypeSearch Type { get; set; }
}

public string AsPrintF
{
get
{
string ret = "";
int idx = 0;
foreach (var e in encodings)
{
if (null != e.Type)
{
switch(e.Type.EncodingType)
{
case CLogEncodingType.ByteArray:
ret += "p";
break;
default:
ret += e.Type.DefinationEncoding;
break;
}

++idx;
}
ret += e.Prefix;
}

return ret;
}
}
public string AsManifestedETWEncoding {
get {
string ret = "";
int idx = 0;
foreach(var e in encodings)
{
if(null != e.Type)
{
//ret += e.Type.DefinationEncoding;
ret += idx;
++idx;
}
ret += e.Prefix;
}

return ret;
}
}

private List<EncodingArg> encodings = new List<EncodingArg>();
}

public static CLogTypeContainer[] BuildTypes(CLogConfigurationFile configFile, CLogLineMatch traceLineMatch, string argString,
string traceLine,
out string cleanedString)
out DecomposedString decompString)
{
List<CLogTypeContainer> ret = new List<CLogTypeContainer>();
string pieces = string.Empty;
int argCount = 0;
cleanedString = string.Empty;

decompString = new DecomposedString();

string prefixString = "";

DecomposedString.EncodingArg currentArg = decompString.CreateNewArg();

if (string.IsNullOrEmpty(argString))
{
return new CLogTypeContainer[0];
Expand All @@ -192,6 +266,7 @@ public static CLogTypeContainer[] BuildTypes(CLogConfigurationFile configFile, C
for (int i = 0; i < argString.Length; ++i)
{
pieces += argString[i];
currentArg.Prefix += argString[i];

if ('%' == argString[i])
{
Expand All @@ -201,6 +276,8 @@ public static CLogTypeContainer[] BuildTypes(CLogConfigurationFile configFile, C
newNode.LeadingString = prefixString;
newNode.ArgStartingIndex = i;

currentArg = decompString.CreateNewArg();

++i;

// Check to see if a custom name is specified for this type
Expand Down Expand Up @@ -245,6 +322,7 @@ public static CLogTypeContainer[] BuildTypes(CLogConfigurationFile configFile, C
{
// 'i' will point to the final character on a match (such that i+1 is the next fresh character)
t = configFile.FindTypeAndAdvance(argString, traceLineMatch, ref i);

}
catch (CLogTypeNotFoundException)
{
Expand All @@ -253,6 +331,7 @@ public static CLogTypeContainer[] BuildTypes(CLogConfigurationFile configFile, C

newNode.TypeNode = t;
newNode.ArgLength = i - newNode.ArgStartingIndex + 1;
currentArg.Type = t;

// If we found a preferred name, the next character after the type should be a closing brace
if (preferredName.Length != 0)
Expand All @@ -276,7 +355,9 @@ public static CLogTypeContainer[] BuildTypes(CLogConfigurationFile configFile, C
}
}

cleanedString = pieces;
if (!pieces.Equals(decompString.AsManifestedETWEncoding))
throw new Exception("ETW strings dont match");

return ret.ToArray();
}

Expand All @@ -300,12 +381,13 @@ private static CLogDecodedTraceLine BuildArgsFromEncodedArgsX(CLogConfigurationF
CLogTraceMacroDefination macroDefination, CLogLineMatch traceLineMatch, string traceLine)
{
string userArgs = macroDefination.CombinePrefixWithEncodedString(traceLineMatch.EncodingString);
string cleanedString;
CLogFileProcessor.DecomposedString decompString;

//
// Loop across all types, ignoring the ones that are not specified in the source code
//
Queue<CLogTypeContainer> types = new Queue<CLogTypeContainer>();
foreach (var type in BuildTypes(configFile, traceLineMatch, userArgs, traceLine, out cleanedString))
foreach (var type in BuildTypes(configFile, traceLineMatch, userArgs, traceLine, out decompString))
{
if (type.TypeNode.Synthesized)
{
Expand Down Expand Up @@ -404,7 +486,7 @@ private static CLogDecodedTraceLine BuildArgsFromEncodedArgsX(CLogConfigurationF
throw new CLogEnterReadOnlyModeException("InvalidUniqueID", CLogHandledException.ExceptionType.InvalidUniqueId, traceLineMatch);
}

CLogDecodedTraceLine decodedTraceLine = new CLogDecodedTraceLine(traceLineMatch.UniqueID, sourcefile, userArgs, traceLineMatch.EncodingString, traceLineMatch, configFile, macroDefination, finalArgs.ToArray(), cleanedString);
CLogDecodedTraceLine decodedTraceLine = new CLogDecodedTraceLine(traceLineMatch.UniqueID, sourcefile, userArgs, traceLineMatch.EncodingString, traceLineMatch, configFile, macroDefination, finalArgs.ToArray(), decompString);

return decodedTraceLine;
}
Expand Down
8 changes: 3 additions & 5 deletions src/clogutils/CLogFullyDecodedMacroEmitter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public void TraceLineDiscovered(CLogDecodedTraceLine decodedTraceLine, CLogOutpu
string implSignature = $" clogTraceImpl_{clogArgCountForMacroAlignment}_ARGS_TRACE_{decodedTraceLine.UniqueId}(";

string macroName = $"_clog_{clogArgCountForMacroAlignment}_ARGS_TRACE_{decodedTraceLine.UniqueId}";
_headerFile.AppendLine($"#ifndef {macroName}");


if (-1 != decodedTraceLine.macro.EncodedArgNumber)
{
Expand Down Expand Up @@ -199,9 +199,6 @@ public void TraceLineDiscovered(CLogDecodedTraceLine decodedTraceLine, CLogOutpu

StringBuilder macroBody = new StringBuilder();

_headerFile.AppendLine("");
_headerFile.AppendLine("");
_headerFile.AppendLine("");
_headerFile.AppendLine("/*----------------------------------------------------------");
_headerFile.AppendLine($"// Decoder Ring for {decodedTraceLine.UniqueId}");
_headerFile.AppendLine($"// {decodedTraceLine.TraceString}");
Expand All @@ -216,6 +213,7 @@ public void TraceLineDiscovered(CLogDecodedTraceLine decodedTraceLine, CLogOutpu
}

_headerFile.AppendLine("----------------------------------------------------------*/");
_headerFile.AppendLine($"#ifndef {macroName}");

//
// BUGBUG: not fully implemented - the intent of 'implSignature' is to give a turn key
Expand Down Expand Up @@ -281,7 +279,7 @@ public void TraceLineDiscovered(CLogDecodedTraceLine decodedTraceLine, CLogOutpu
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Err, " typo in a trace string) - have two options to override/refresh the signature check");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Std, "");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Std, " Force/Clobber the event signature - indicating you desire breaking the uniqueness contract");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Std, $" 1. remove UniquenessHash ({existingTraceInfo.UniquenessHash}) frome this TraceID({existingTraceInfo.TraceID}) in file {decodedTraceLine.configFile.FilePath}");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Std, $" 1. remove UniquenessHash ({existingTraceInfo.UniquenessHash}) from this TraceID({existingTraceInfo.TraceID}) in file {decodedTraceLine.configFile.FilePath}");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Std, $" 2. specify the --overwriteHashCollisions command line argument (good if you're making lots of changes that are all safe)");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Tip, $" 3. set the environment variable CLOG_DEVELOPMENT_MODE=1 ($env:CLOG_DEVELOPMENT_MODE=1)");
CLogConsoleTrace.TraceLine(CLogConsoleTrace.TraceType.Std, "");
Expand Down