forked from goodboy/tractor
4f863a6989
Now supports use from any `trio` task, any sync thread started with `trio.to_thread.run_sync()` AND also via `breakpoint()` builtin API! The only bit missing now is support for `asyncio` tasks when in infected mode.. Bo `greenback` setup/API adjustments: - move `._rpc.maybe_import_gb()` to -> `devx._debug` and factor out the cached import checking into a sync func whilst placing the async `.ensure_portal()` bootstrapping into a new async `maybe_init_greenback()`. - use the new init-er func inside `open_root_actor()` with the output predicating whether we override the `breakpoint()` hook. core `devx._debug` implementation deatz: - make `mk_mpdb()` only return the `pdp.Pdb` subtype instance since the sigint unshielding func is now accessible from the `Lock` singleton from anywhere. - add non-main thread support (at least for `trio.to_thread` use cases) to our `Lock` with a new `.is_trio_thread()` predicate that delegates directly to `trio`'s internal version. - do `Lock.is_trio_thread()` checks inside any methods which require special provisions when invoked from a non-main `trio` thread: - `.[un]shield_sigint()` methods since `signal.signal` usage is only allowed from cpython's main thread. - `.release()` since `trio.StrictFIFOLock` can only be called from a `trio` task. - rework `.pause_from_sync()` itself to directly call `._set_trace()` and don't bother with `greenback._await()` when we're already calling it from a `.to_thread.run_sync()` thread, oh and try to use the thread/task name when setting `Lock.local_task_in_debug`. - make it an RTE for now if you try to use `.pause_from_sync()` from any infected-`asyncio` task, but support is (hopefully) coming soon! For testing we add a new `test_debugger.py::test_pause_from_sync()` which includes a ctrl-c parametrization around the `examples/debugging/sync_bp.py` script which includes all currently supported/working usages: - `tractor.pause_from_sync()`. - via `breakpoint()` overload. - from a `trio.to_thread.run_sync()` spawn. |
||
---|---|---|
.. | ||
asyncio_bp.py | ||
debug_mode_hang.py | ||
fast_error_in_root_after_spawn.py | ||
multi_daemon_subactors.py | ||
multi_nested_subactors_error_up_through_nurseries.py | ||
multi_subactor_root_errors.py | ||
multi_subactors.py | ||
open_ctx_modnofound.py | ||
per_actor_debug.py | ||
restore_builtin_breakpoint.py | ||
root_actor_breakpoint.py | ||
root_actor_breakpoint_forever.py | ||
root_actor_error.py | ||
root_cancelled_but_child_is_in_tty_lock.py | ||
root_timeout_while_child_crashed.py | ||
subactor_bp_in_ctx.py | ||
subactor_breakpoint.py | ||
subactor_error.py | ||
sync_bp.py |