Exemplo n.º 1
0
 private void ShowRaceInstrumentationVariables(Model Model, string CapturedState, Program OriginalProgram)
 {
     foreach (var v in OriginalProgram.TopLevelDeclarations.OfType <Variable>().Where(Item =>
                                                                                      QKeyValue.FindBoolAttribute(Item.Attributes, "race_checking")))
     {
         foreach (var t in AccessType.Types)
         {
             if (v.Name.StartsWith("_" + t + "_HAS_OCCURRED_"))
             {
                 string     ArrayName;
                 AccessType Access;
                 GetArrayNameAndAccessTypeFromAccessHasOccurredVariable(v, out ArrayName, out Access);
                 var AccessOffsetVar = OriginalProgram.TopLevelDeclarations.OfType <Variable>().Where(Item =>
                                                                                                      Item.Name == RaceInstrumentationUtil.MakeOffsetVariableName(ArrayName, Access)).ToList()[0];
                 if (ExtractVariableValueFromCapturedState(v.Name, CapturedState, Model) == "true")
                 {
                     if (GetStateFromModel(CapturedState, Model).TryGet(AccessOffsetVar.Name) is Model.Number)
                     {
                         Console.Error.WriteLine("  " + Access.ToString().ToLower() + " " + Access.Direction() + " "
                                                 + ArrayOffsetString(Model, CapturedState, v, AccessOffsetVar, ArrayName)
                                                 + " (" + ThreadDetails(Model, 1, false) + ")");
                     }
                     else
                     {
                         Console.Error.WriteLine("  " + Access.ToString().ToLower() + " " + Access.Direction() + " " + ArrayName.TrimStart(new char[] { '$' })
                                                 + " (unknown offset)" + " (" + ThreadDetails(Model, 1, false) + ")");
                     }
                 }
                 break;
             }
         }
     }
 }