public override PexResultTracking GetResultTreatment(PexTrackingThread thread, int callId,
                                                                 IMethodSignature methodSignature, TypeEx[] varArgTypes,
                                                                 bool hasDerivedResult)
            {
                Dump("in GetResultTreatment=============================");
                // track uninstrumented method calls
                if (!hasDerivedResult)
                {
                    var method = methodSignature as Method;
                    if (method.FullName.Equals(_trackMethod.FullName))
                    {
                        if (track)
                        {
                            Dump("start to track " + method.FullName);
                            TrackingMethods.Add(method);
                            Dump("end GetResultTreatment=============================");
                            return(PexResultTracking.Track);
                        }
                        Dump("method " + method.FullName + " is not tracked!");
                    }


//                    IssueTrackDatabase db;
//                    if (host.TryGetService<IssueTrackDatabase>(out db))
//                    {
////                        host.Log.Dump("size", "size", "uninstrumented methods: " + db.UnInstrumentedMethods.Count);
//                        foreach (var uninstrumentedMethod in db.UnInstrumentedMethods)
//                        {
////                            host.Log.Dump("Method", "Method", "uninstrumented methods: " + uninstrumentedMethod.Method.FullName);
////                            host.Log.Dump("Method", "Method2", "methods: " + method.Definition.FullName);
//                            if (uninstrumentedMethod.Method.FullName.Equals(method.FullName))
//                            {
////                                host.Log.Dump("Method", "track", "track: " + method.Definition.FullName);
//                                if (TrackingMethods.Add(method))
//                                {
//                                    return PexResultTracking.Track;
//                                }
//                            }
//                        }
//                    }
                }
                Dump("end GetResultTreatment=============================");
                return(PexResultTracking.ConcreteOrDerived);
            }
            public override PexArgumentTracking GetArgumentTreatment(PexTrackingThread thread, int frameId,
                                                                     Method method)
            {
                Dump("in GetArgumentTreatment=====================");
                Dump("thread.ThreadId: " + thread.ThreadId + " frameid: " + frameId + " method: " + method);


                if (trackArg && methodForTrackingArg != null && method.Equals(methodForTrackingArg))
                {
                    trackArg             = false;
                    methodForTrackingArg = null;
                    Dump("track parameters of " + method);
                    Dump("end GetArgumentTreatment=====================");
                    Dump("");
                    return(PexArgumentTracking.Track);
                }

                Dump("end GetArgumentTreatment=====================");
                Dump("");
                return(PexArgumentTracking.Derived);
            }
Beispiel #3
0
        public override PexArgumentTracking GetArgumentTreatment(PexTrackingThread thread, int frameId, Method method)
        {
            if (trackedFrameId >= 0)
            {
                return(PexArgumentTracking.Derived);
            }
            else if (this.depth != this.level)
            {
                return(PexArgumentTracking.Concrete);
            }
            else
            {
                //let's reset the state before the execution of the method
                //((PexTrackingState)thread.State).RestartObjectFieldMaps();
                // let's start to collect that path condition from scratch
                this.PathConditionBuilder.Clear();
                _thread        = thread;
                trackedFrameId = frameId;

                /*
                 * TypeEx declaringType;
                 * if (method.TryGetDeclaringType(out declaringType))
                 *  foreach (var f in declaringType.DeclaredStaticFields)
                 *  {
                 *      Term symbol = this.TermManager.Symbol(
                 *          new PexTrackedStaticFieldId(f));
                 *      thread.State.StoreStaticField(f, symbol);
                 *  }
                 */

                IState state = thread.State;
                state.StartTrackingEffects(this);
                this.newObjects.Clear();

                //changed from track to derived so that we don't introduce symbolic values for arguments and object fields
                return(PexArgumentTracking.Derived);
            }
        }
            public override PexResultTracking GetResultTreatment(PexTrackingThread thread, int callId,
                IMethodSignature methodSignature, TypeEx[] varArgTypes,
                bool hasDerivedResult)
            {
                // track uninstrumented method calls
                if (!hasDerivedResult)
                {
                    var method = methodSignature as Method;
                    if (method.FullName.Equals(_trackMethod.FullName))
                    {
                        if (track)
                        {
                            Dump("start to track " + method.FullName);
                            TrackingMethods.Add(method);
                            return PexResultTracking.Track;
                        }
                        Dump("method " + method.FullName + " is not tracked!");
                    }

                //                    IssueTrackDatabase db;
                //                    if (host.TryGetService<IssueTrackDatabase>(out db))
                //                    {
                ////                        host.Log.Dump("size", "size", "uninstrumented methods: " + db.UnInstrumentedMethods.Count);
                //                        foreach (var uninstrumentedMethod in db.UnInstrumentedMethods)
                //                        {
                ////                            host.Log.Dump("Method", "Method", "uninstrumented methods: " + uninstrumentedMethod.Method.FullName);
                ////                            host.Log.Dump("Method", "Method2", "methods: " + method.Definition.FullName);
                //                            if (uninstrumentedMethod.Method.FullName.Equals(method.FullName))
                //                            {
                ////                                host.Log.Dump("Method", "track", "track: " + method.Definition.FullName);
                //                                if (TrackingMethods.Add(method))
                //                                {
                //                                    return PexResultTracking.Track;
                //                                }
                //                            }
                //                        }
                //                    }
                }

                return PexResultTracking.ConcreteOrDerived;
            }
            public override PexArgumentTracking GetArgumentTreatment(PexTrackingThread thread, int frameId,
                Method method)
            {
                Dump("in GetArgumentTreatment=====================");
                Dump("thread.ThreadId: " + thread.ThreadId + " frameid: " + frameId + " method: " + method);

                if (trackArg && methodForTrackingArg != null && method.Equals(methodForTrackingArg))
                {
                    trackArg = false;
                    methodForTrackingArg = null;
                    Dump("track parameters of " + method);
                    Dump("end GetArgumentTreatment=====================");
                    Dump("");
                    return PexArgumentTracking.Track;
                }

                Dump("end GetArgumentTreatment=====================");
                Dump("");
                return PexArgumentTracking.Derived;
            }
        public override PexArgumentTracking GetArgumentTreatment(PexTrackingThread thread, int frameId, Method method)
        {
            if (trackedFrameId >= 0)
                return PexArgumentTracking.Derived;
            else if (this.depth != this.level)
                return PexArgumentTracking.Concrete;
            else
            {
                //let's reset the state before the execution of the method
                //((PexTrackingState)thread.State).RestartObjectFieldMaps();
                // let's start to collect that path condition from scratch
                this.PathConditionBuilder.Clear();
                _thread = thread;
                trackedFrameId = frameId;

                /*
                TypeEx declaringType;
                if (method.TryGetDeclaringType(out declaringType))
                    foreach (var f in declaringType.DeclaredStaticFields)
                    {
                        Term symbol = this.TermManager.Symbol(
                            new PexTrackedStaticFieldId(f));
                        thread.State.StoreStaticField(f, symbol);
                    }
                */

                IState state = thread.State;
                state.StartTrackingEffects(this);
                this.newObjects.Clear();

                //changed from track to derived so that we don't introduce symbolic values for arguments and object fields
                return PexArgumentTracking.Derived;
            }
        }