diff --git a/dvc/cli.py b/dvc/cli.py index 23ef3c65f..6600194c0 100644 --- a/dvc/cli.py +++ b/dvc/cli.py @@ -146,6 +146,10 @@ def get_parent_parser(): ) parent_parser.add_argument("--cprofile-dump", help=argparse.SUPPRESS) + parent_parser.add_argument( + "--pdb", action="store_true", default=False, help=argparse.SUPPRESS, + ) + log_level_group = parent_parser.add_mutually_exclusive_group() log_level_group.add_argument( "-q", "--quiet", action="count", default=0, help="Be quiet." diff --git a/dvc/main.py b/dvc/main.py index 641815c0a..c4c11421d 100644 --- a/dvc/main.py +++ b/dvc/main.py @@ -42,6 +42,19 @@ def profile(enable, dump): prof.dump_stats(dump) +@contextmanager +def debug(enable): + try: + yield + return + except Exception: + if enable: + import pdb # noqa: T100 + + pdb.post_mortem() + raise + + def main(argv=None): # noqa: C901 """Run dvc CLI command. @@ -72,8 +85,9 @@ def main(argv=None): # noqa: C901 logger.trace(args) with profile(enable=args.cprofile, dump=args.cprofile_dump): - cmd = args.func(args) - ret = cmd.run() + with debug(args.pdb): + cmd = args.func(args) + ret = cmd.run() except ConfigError: logger.exception("configuration error") ret = 251