public function start($arguments = null)
    {

        $this->checkProperties();

        global $argv;
        $arguments = $arguments === null ? $argv : $arguments;

        try {
            $continue = $this->processParameters($arguments);
            if (!$continue) {
                return;
            }

            return $this->run($arguments);
        } catch (Exception $e) {
            if ($this->exceptionCatchingEnabled) {
                fwrite(STDERR, $e->getMessage() . "\n");
                exit(1);
            } else {
                throw $e;
            }
        }
    }