tractor/examples/debugging
Tyler Goodlet a628eabb30 Officially test proto-ed `stackscope` integration
By re-purposing our `pexpect`-based console matching with a new
`debugging/shield_hang_in_sub.py` example, this tests a few "hanging
actor" conditions more formally:

- that despite a hanging actor's task we can dump
  a `stackscope.extract()` tree on relay of `SIGUSR1`.
- the actor tree will terminate despite a shielded forever-sleep by our
  "T-800" zombie reaper machinery activating and hard killing the
  underlying subprocess.

Some test deats:
- simulates the expect actions of a real user by manually using
  `os.kill()` to send both signals to the actor-tree program.
- `pexpect`-matches against `log.devx()` emissions under normal
  `debug_mode == True` usage.
- ensure we get the actual "T-800 deployed" `log.error()` msg and
  that the actor tree eventually terminates!

Surrounding (re-org/impl/test-suite) changes:
- allow disabling usage via a `maybe_enable_greenback: bool` to
  `open_root_actor()` but enable by def.
- pretty up the actual `.devx()` content from `.devx._stackscope`
  including be extra pedantic about the conc-primitives for each signal
  event.
- try to avoid double handles of `SIGUSR1` even though it seems the
  original (what i thought was a) problem was actually just double
  logging in the handler..
  |_ avoid double applying the handler func via `signal.signal()`,
  |_ use a global to avoid double handle func calls and,
  |_ a `threading.RLock` around handling.
- move common fixtures and helper routines from `test_debugger` to
  `tests/devx/conftest.py` and import them for use in both test mods.
2024-07-10 19:58:27 -04:00
..
asyncio_bp.py Provision for infected-`asyncio` debug mode support 2024-03-25 16:09:32 -04:00
debug_mode_hang.py Drop now-deprecated deps on modern `trio`/Python 2024-03-13 18:41:24 -04:00
fast_error_in_root_after_spawn.py Fix type path to new `_supervise` mod 2021-10-23 15:54:40 -04:00
multi_daemon_subactors.py Tweaks to debugger examples 2024-05-28 09:22:59 -04:00
multi_nested_subactors_error_up_through_nurseries.py Tweaks to debugger examples 2024-05-28 09:22:59 -04:00
multi_subactor_root_errors.py Adjust debugger tests to expect depth > 1 crashes 2021-10-14 13:39:46 -04:00
multi_subactors.py Flip to `.pause()` in subactor bp example 2024-04-14 18:53:42 -04:00
open_ctx_modnofound.py Add basic module-not-found when opening a ctx eg. 2022-08-02 12:17:06 -04:00
per_actor_debug.py Tweaks to debugger examples 2024-05-28 09:22:59 -04:00
pm_in_subactor.py Add a `tractor.post_mortem()` API test + example 2024-05-30 16:03:28 -04:00
restore_builtin_breakpoint.py Restore `breakpoint()` hook after runtime exits 2023-05-15 00:47:29 -04:00
root_actor_breakpoint.py Drop `tractor.run()` from all examples 2021-05-07 11:21:40 -04:00
root_actor_breakpoint_forever.py Tweaks to debugger examples 2024-05-28 09:22:59 -04:00
root_actor_error.py Drop `tractor.run()` from all examples 2021-05-07 11:21:40 -04:00
root_cancelled_but_child_is_in_tty_lock.py Drop `tractor.run()` from all examples 2021-05-07 11:21:40 -04:00
root_timeout_while_child_crashed.py Docs and comments tidying 2021-08-01 10:44:13 -04:00
shield_hang_in_sub.py Officially test proto-ed `stackscope` integration 2024-07-10 19:58:27 -04:00
shielded_pause.py Finally, officially support shielded REPL-ing! 2024-05-30 17:52:24 -04:00
subactor_bp_in_ctx.py Add back in async gen loop 2022-07-27 11:40:02 -04:00
subactor_breakpoint.py Flip to `.pause()` in subactor bp example 2024-04-14 18:53:42 -04:00
subactor_error.py Tweaks to debugger examples 2024-05-28 09:22:59 -04:00
sync_bp.py Get multi-threaded sync-pausing fully workin! 2024-07-10 12:29:05 -04:00