Support sync code breakpointing via built-in
Override `breakpoint()` for sync code making it work properly with `trio` as per: https://github.com/python-trio/trio/issues/1155#issuecomment-742964018 Relates to #193sync_breakpoint
parent
d8b6c0093c
commit
109066dda9
|
@ -274,15 +274,32 @@ def _mk_pdb():
|
|||
return pdb
|
||||
|
||||
|
||||
def _set_trace(actor):
|
||||
def _set_trace(actor=None):
|
||||
pdb = _mk_pdb()
|
||||
|
||||
if actor is not None:
|
||||
log.runtime(f"\nAttaching pdb to actor: {actor.uid}\n")
|
||||
|
||||
pdb = _mk_pdb()
|
||||
pdb.set_trace(
|
||||
# start 2 levels up in user code
|
||||
frame=sys._getframe().f_back.f_back,
|
||||
)
|
||||
|
||||
else:
|
||||
# we entered the global ``breakpoint()`` built-in from sync code
|
||||
global _in_debug, _pdb_release_hook
|
||||
_in_debug = 'sync'
|
||||
|
||||
def nuttin():
|
||||
pass
|
||||
|
||||
_pdb_release_hook = nuttin
|
||||
|
||||
pdb.set_trace(
|
||||
# start 2 levels up in user code
|
||||
frame=sys._getframe().f_back,
|
||||
)
|
||||
|
||||
|
||||
breakpoint = partial(
|
||||
_breakpoint,
|
||||
|
|
|
@ -64,8 +64,7 @@ def _trio_main(
|
|||
# we don't need it thanks to our cancellation machinery.
|
||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||
|
||||
# TODO: make a global func to set this or is it too hacky?
|
||||
# os.environ['PYTHONBREAKPOINT'] = 'tractor._debug.breakpoint'
|
||||
log.info(f"Started new trio process for {actor.uid}")
|
||||
|
||||
if actor.loglevel is not None:
|
||||
log.info(
|
||||
|
|
|
@ -4,6 +4,7 @@ Root actor runtime ignition(s).
|
|||
from contextlib import asynccontextmanager
|
||||
from functools import partial
|
||||
import importlib
|
||||
import os
|
||||
from typing import Tuple, Optional, List, Any
|
||||
import typing
|
||||
import warnings
|
||||
|
@ -55,6 +56,11 @@ async def open_root_actor(
|
|||
"""Async entry point for ``tractor``.
|
||||
|
||||
"""
|
||||
# Override the global debugger hook to make it play nice with
|
||||
# ``trio``, see:
|
||||
# https://github.com/python-trio/trio/issues/1155#issuecomment-742964018
|
||||
os.environ['PYTHONBREAKPOINT'] = 'tractor._debug._set_trace'
|
||||
|
||||
# mark top most level process as root actor
|
||||
_state._runtime_vars['_is_root'] = True
|
||||
|
||||
|
|
Loading…
Reference in New Issue