| | |
| | |
| | |
| | |
| |
|
| | import multiprocessing |
| | import os |
| | import pdb |
| | import sys |
| |
|
| |
|
| | __all__ = ["set_trace"] |
| |
|
| |
|
| | _stdin = [None] |
| | _stdin_lock = multiprocessing.Lock() |
| | try: |
| | _stdin_fd = sys.stdin.fileno() |
| | except Exception: |
| | _stdin_fd = None |
| |
|
| |
|
| | class MultiprocessingPdb(pdb.Pdb): |
| | """A Pdb wrapper that works in a multiprocessing environment. |
| | |
| | Usage: `from fairseq import pdb; pdb.set_trace()` |
| | """ |
| |
|
| | def __init__(self): |
| | pdb.Pdb.__init__(self, nosigint=True) |
| |
|
| | def _cmdloop(self): |
| | stdin_bak = sys.stdin |
| | with _stdin_lock: |
| | try: |
| | if _stdin_fd is not None: |
| | if not _stdin[0]: |
| | _stdin[0] = os.fdopen(_stdin_fd) |
| | sys.stdin = _stdin[0] |
| | self.cmdloop() |
| | finally: |
| | sys.stdin = stdin_bak |
| |
|
| |
|
| | def set_trace(): |
| | pdb = MultiprocessingPdb() |
| | pdb.set_trace(sys._getframe().f_back) |
| |
|