/// <summary>
        /// Creates a new FuzzController. Once the snapshotBreakpoint is reached a snapshot is created.
        /// The snapshot gets restored once restore Breakpoint is reached
        /// </summary>
        /// <param name="connector">connector to use</param>
        /// <param name="snapshotBreakpoint">Location to create a snapshot</param>
        /// <param name="restoreBreakpoint">Location to restore the snapshot</param>
        public FuzzController(ITargetConnector connector, string logDestination,
			IDataLogger logger, FuzzDescription fuzzDescription, IFuzzLocation[] preConditions)
        {
            _connector = connector;
            _snapshot = null;
            _dataLogger = logger;
            _logDestination = logDestination;

            _errorLog = new ErrorLog (_logDestination);

            _fuzzDescription = fuzzDescription;
            _fuzzDescription.Init ();

            _preConditions = preConditions;
        }
        public FuzzController[] CreateFuzzController()
        {
            List<FuzzController> fuzzControllers = new List<FuzzController> ();
            foreach (FuzzDescriptionInfo info in _fuzzDescriptions)
            {

                IBreakpoint snapshot = _connector.SetSoftwareBreakpoint (info.RegionStart.ResolveAddress ().Value, 0, "snapshot");
                IBreakpoint restore = _connector.SetSoftwareBreakpoint (info.RegionEnd.ResolveAddress ().Value, 0, "restore");

                FuzzDescription fuzzDescription = new FuzzDescription (snapshot, restore);
                fuzzDescription.FuzzLocation.AddRange (info.FuzzLocations);

                fuzzControllers.Add (new FuzzController (_connector, _logDestination,
                    new LoggerCollection (_loggers.ToArray ()),
                        fuzzDescription, _preConditions.ToArray()));

            }

            return fuzzControllers.ToArray ();
        }