private static string TryGetClassName(UIntPtr location, UIntPtr objH)
        {
            var className = "Unk";

            if (objH == UIntPtr.Zero)
            {
                return(className);
            }
            UIntPtr classHandle;

            if (ObjectTracking.TryGetClassHandle(objH, out classHandle))
            {
                className = ObjectTracking.GetClassName(classHandle);
            }
            return(className);
        }
示例#2
0
        private static T ref_wrap_uintptr <T>(ClrSyncManager manager, ref T tgt, SimpleRefDel <T> originalCode)
        {
            T   ret;
            var ptr = ObjectTracking.GetCurrentRawAddress(ref tgt);

            manager.SyncVarAccess(ptr, MSyncVarOp.RWVAR_READWRITE);
            try
            {
                ret = originalCode(ref tgt);
            }
            catch (Exception e)
            {
                manager.CommitSyncVarAccess();
                throw e;
            }
            manager.CommitSyncVarAccess();
            return(ret);
        }
        private void inputImage_MouseUp(object sender, MouseButtonEventArgs e)
        {
            inputImageCanvas.Children.Clear();
            isSelecting = false;
            endPos      = new Point(Math.Min(e.GetPosition(inputImage).X, inputImage.Width),
                                    Math.Min(e.GetPosition(inputImage).Y, inputImage.Height));
            Console.WriteLine("UP!" + endPos);

            int xRate = (int)(inputImage.Source.Width / inputImage.Width);
            int yRate = (int)(inputImage.Source.Height / inputImage.Height);

            selectingWindow = new System.Drawing.Rectangle(
                (int)startPos.X * xRate, (int)startPos.Y * yRate,
                (int)(endPos.X - startPos.X) * xRate, (int)(endPos.Y - startPos.Y) * yRate);

            trackStart  = true;
            objTracking = null;
        }
        private void updateCamWorker(object sender, DoWorkEventArgs e)
        {
            using (Image <Bgr, Byte> frame = webcam.QueryFrame().Flip(Emgu.CV.CvEnum.FLIP.HORIZONTAL))
            {
                if (trackStart)
                {
                    if (objTracking == null)
                    {
                        objTracking = new ObjectTracking(frame, selectingWindow);
                    }
                    else
                    {
                        System.Drawing.Rectangle result = objTracking.Tracking(frame);

                        frame.Draw(result, new Bgr(0, 255, 0), 3);

                        Dispatcher.Invoke(DispatcherPriority.Normal,
                                          new Action(
                                              delegate()
                        {
                            if (objTracking != null)
                            {
                                inputImage.Source       = frame.ToBitmapSource();
                                hueImage.Source         = objTracking.hue.ToBitmapSource();
                                backprojectImage.Source = objTracking.backproject.ToBitmapSource();
                                maskImage.Source        = objTracking.mask.ToBitmapSource();
                            }
                        }
                                              ));
                    }
                }
                else
                {
                    Dispatcher.Invoke(DispatcherPriority.Normal,
                                      new Action(
                                          delegate()
                    {
                        inputImage.Source = frame.ToBitmapSource();
                    }
                                          ));
                }
            }
        }
        public override void Store(UIntPtr location, uint size, int codeLabel, bool is_volatile)
        {
            //TODO: Do not record writes within a constructor (BoundedAsyncRacy)
            if (this.CallStack.Peek().IsConstructor)
            {
                return;
            }

            UIntPtr objH, objO;

            ObjectTracking.GetObjectHandle(location, out objH, out objO);

            if (this.RecordRW && !this.CallStack.Peek().FullName.Contains("Microsoft.PSharp") && objH != null)
            {
                // TODO: Hack
                if (this.CallStack.Peek().ToString().Contains("Monitor"))
                {
                    return;
                }
                // End hack

                ThreadTrace obj = this.ThreadTrace[this.ThreadTrace.Count - 1];
                obj.Accesses.Add(new ActionInstr(true, location, objH, objO, GetSourceLocation(location)));
                this.DebugTrace.Add($"<ThreadMonitorLog> Store '{location}' '{objH} '{objO}'" +
                                    $"'{this.CallStack.Peek()}' '{GetSourceLocation(location)}'.");
            }
            else if (!this.CallStack.Peek().FullName.Contains("Microsoft.PSharp") && objH != null)
            {
                foreach (Tuple <Method, int> m in TaskMethods)
                {
                    //TODO: This is fragile (for tasks)
                    if (this.CallStack.Peek().ShortName.Contains(m.Item1.ShortName))
                    {
                        ThreadTrace obj = Monitoring.ThreadTrace.CreateTraceForTask(m.Item2);
                        obj.Accesses.Add(new ActionInstr(true, location, objH, objO, GetSourceLocation(location)));
                        this.ThreadTrace.Add(obj);
                    }
                }
            }
        }