def run(self, args_list=None):
        """Run Application.main and exits with the return value."""
        self.log.debug("Application.run: {args_list}".format(**locals()))
        retval = None
        try:
            retval = self._run(args_list=args_list)
        except KeyboardInterrupt:
            self.log.verbose("Interrupted")                    # pragma: nocover
        except SystemExit as exit:
            self.log.verbose("Exited")
            retval = exit.code
        except Exception:
            print("Uncaught exception", file=sys.stderr)
            traceback.print_exc()
            if "debug_pdb" in self.args and self.args.debug_pdb:
                debugger()
            retval = Application.UNCAUGHT_EXCEPTION_EXIT
            raise
        finally:
            try:
                self._atexit()
            finally:
                sys.stderr.flush()
                sys.stdout.flush()
                sys.exit(retval)
Run Application.main and exits with the return value.