Cleanups and more comments
							parent
							
								
									68773d51fd
								
							
						
					
					
						commit
						f9ef3fc5de
					
				|  | @ -3,7 +3,7 @@ Multi-core debugging for da peeps! | |||
| """ | ||||
| import sys | ||||
| from functools import partial | ||||
| from typing import Awaitable, Tuple | ||||
| from typing import Awaitable, Tuple, Optional, Callable | ||||
| 
 | ||||
| from async_generator import aclosing | ||||
| import tractor | ||||
|  | @ -27,27 +27,8 @@ log = get_logger(__name__) | |||
| __all__ = ['breakpoint', 'post_mortem'] | ||||
| 
 | ||||
| 
 | ||||
| # TODO: is there some way to determine this programatically? | ||||
| _pdb_exit_patterns = tuple( | ||||
|     str.encode(patt + "\n") for patt in ('c', 'cont', 'continue', 'q', 'quit') | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| _pdb_release_hook = None | ||||
| 
 | ||||
| 
 | ||||
| class PdbwTeardown(pdbpp.Pdb): | ||||
|     """Add teardown hooks to the regular ``pdbpp.Pdb``. | ||||
|     """ | ||||
|     # TODO: figure out how to dissallow recursive .set_trace() entry | ||||
|     # since that'll cause deadlock for us. | ||||
|     def set_continue(self): | ||||
|         super().set_continue() | ||||
|         self.config.teardown(self) | ||||
| 
 | ||||
|     def set_quit(self): | ||||
|         super().set_quit() | ||||
|         self.config.teardown(self) | ||||
| # placeholder for function to set a ``trio.Event`` | ||||
| _pdb_release_hook: Optional[Callable] = None | ||||
| 
 | ||||
| 
 | ||||
| class TractorConfig(pdbpp.DefaultConfig): | ||||
|  | @ -59,13 +40,32 @@ class TractorConfig(pdbpp.DefaultConfig): | |||
|         _pdb_release_hook(_pdb) | ||||
| 
 | ||||
| 
 | ||||
| class PdbwTeardown(pdbpp.Pdb): | ||||
|     """Add teardown hooks to the regular ``pdbpp.Pdb``. | ||||
|     """ | ||||
|     # override the pdbpp config with our coolio one | ||||
| pdbpp.Pdb.DefaultConfig = TractorConfig | ||||
|     DefaultConfig = TractorConfig | ||||
| 
 | ||||
|     # TODO: figure out how to dissallow recursive .set_trace() entry | ||||
|     # since that'll cause deadlock for us. | ||||
|     def set_continue(self): | ||||
|         super().set_continue() | ||||
|         self.config.teardown(self) | ||||
| 
 | ||||
|     def set_quit(self): | ||||
|         super().set_quit() | ||||
|         self.config.teardown(self) | ||||
| 
 | ||||
| 
 | ||||
| # TODO: will be needed whenever we get to true remote debugging. | ||||
| # XXX see https://github.com/goodboy/tractor/issues/130 | ||||
| 
 | ||||
| # # TODO: is there some way to determine this programatically? | ||||
| # _pdb_exit_patterns = tuple( | ||||
| #     str.encode(patt + "\n") for patt in ( | ||||
| #         'c', 'cont', 'continue', 'q', 'quit') | ||||
| # ) | ||||
| 
 | ||||
| # def subactoruid2proc( | ||||
| #     actor: 'Actor',  # noqa | ||||
| #     uid: Tuple[str, str] | ||||
|  | @ -170,17 +170,16 @@ def _breakpoint(debug_func) -> Awaitable[None]: | |||
|     _pdb_release_hook = unlock | ||||
| 
 | ||||
|     async def _bp(): | ||||
|         # this must be awaited by caller | ||||
|         await actor._root_nursery.start( | ||||
|             wait_for_parent_stdin_hijack | ||||
|         ) | ||||
|         # this **must** be awaited by the caller and is done using the | ||||
|         # root nursery so that the debugger can continue to run without | ||||
|         # being restricted by the scope of a new task nursery. | ||||
|         await actor._root_nursery.start(wait_for_parent_stdin_hijack) | ||||
| 
 | ||||
|         # block here one frame up where ``breakpoint()`` | ||||
|         # was awaited and begin handling stdin | ||||
|         # block here one (at the appropriate frame *up* where | ||||
|         # ``breakpoint()`` was awaited and begin handling stdio | ||||
|         debug_func(actor) | ||||
| 
 | ||||
|     # return wait_for_parent_stdin_hijack() | ||||
|     return _bp() | ||||
|     return _bp()  # user code **must** await this! | ||||
| 
 | ||||
| 
 | ||||
| def _set_trace(actor): | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue