mirror of
https://github.com/microsoft/debugpy.git
synced 2025-12-23 08:48:12 +00:00
* sys.__breakpointhook__ should be available when __builtin__.breakpoint is set. Fixes #766 * On Python 3.7, sys.__breakpointhook__ should not be tested as it'll call the original pdb version.
This commit is contained in:
parent
ea24922b71
commit
425291ed88
6 changed files with 37 additions and 6 deletions
|
|
@ -60,7 +60,12 @@ def install_breakpointhook():
|
|||
def custom_sitecustomize_breakpointhook(*args, **kwargs):
|
||||
import os
|
||||
hookname = os.getenv('PYTHONBREAKPOINT')
|
||||
if hookname is not None and len(hookname) > 0 and hasattr(sys, '__breakpointhook__'):
|
||||
if (
|
||||
hookname is not None
|
||||
and len(hookname) > 0
|
||||
and hasattr(sys, '__breakpointhook__')
|
||||
and sys.__breakpointhook__ != custom_sitecustomize_breakpointhook
|
||||
):
|
||||
sys.__breakpointhook__(*args, **kwargs)
|
||||
else:
|
||||
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
|
||||
|
|
@ -87,6 +92,7 @@ def install_breakpointhook():
|
|||
# In older versions, breakpoint() isn't really available, so, install the hook directly
|
||||
# in the builtins.
|
||||
__builtin__.breakpoint = custom_sitecustomize_breakpointhook
|
||||
sys.__breakpointhook__ = custom_sitecustomize_breakpointhook
|
||||
|
||||
# Install the breakpoint hook at import time.
|
||||
install_breakpointhook()
|
||||
|
|
|
|||
|
|
@ -59,7 +59,12 @@ def install_breakpointhook(pydevd_breakpointhook=None):
|
|||
if pydevd_breakpointhook is None:
|
||||
def pydevd_breakpointhook(*args, **kwargs):
|
||||
hookname = os.getenv('PYTHONBREAKPOINT')
|
||||
if hookname is not None and len(hookname) > 0 and hasattr(sys, '__breakpointhook__'):
|
||||
if (
|
||||
hookname is not None
|
||||
and len(hookname) > 0
|
||||
and hasattr(sys, '__breakpointhook__')
|
||||
and sys.__breakpointhook__ != pydevd_breakpointhook
|
||||
):
|
||||
sys.__breakpointhook__(*args, **kwargs)
|
||||
else:
|
||||
settrace(*args, **kwargs)
|
||||
|
|
@ -83,6 +88,7 @@ def install_breakpointhook(pydevd_breakpointhook=None):
|
|||
# In older versions, breakpoint() isn't really available, so, install the hook directly
|
||||
# in the builtins.
|
||||
__builtin__.breakpoint = pydevd_breakpointhook
|
||||
sys.__breakpointhook__ = pydevd_breakpointhook
|
||||
|
||||
# Install the breakpoint hook at import time.
|
||||
install_breakpointhook()
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
def break_in_method():
|
||||
breakpoint() # Builtin on Py3, but we provide a backport on Py2.
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
import sys
|
||||
def break_in_method():
|
||||
sys.__breakpointhook__() # Builtin on Py3, but we provide a backport on Py2.
|
||||
|
||||
|
||||
break_in_method()
|
||||
print('TEST SUCEEDED')
|
||||
|
|
@ -1769,12 +1769,21 @@ def test_stop_on_start_regular(case_setup):
|
|||
writer.finished_ok = True
|
||||
|
||||
|
||||
def test_py_37_breakpoint(case_setup):
|
||||
with case_setup.test_file('_debugger_case_breakpoint.py') as writer:
|
||||
def _get_breakpoint_cases():
|
||||
if sys.version_info >= (3, 7):
|
||||
# Just check breakpoint()
|
||||
return ('_debugger_case_breakpoint.py',)
|
||||
else:
|
||||
# Check breakpoint() and sys.__breakpointhook__ replacement.
|
||||
return ('_debugger_case_breakpoint.py', '_debugger_case_breakpoint2.py')
|
||||
|
||||
@pytest.mark.parametrize("filename", _get_breakpoint_cases())
|
||||
def test_py_37_breakpoint(case_setup, filename):
|
||||
with case_setup.test_file(filename) as writer:
|
||||
writer.write_make_initial_run()
|
||||
|
||||
hit = writer.wait_for_breakpoint_hit(
|
||||
REASON_THREAD_SUSPEND, file='_debugger_case_breakpoint.py', line=2)
|
||||
REASON_THREAD_SUSPEND, file=filename, line=3)
|
||||
|
||||
writer.write_run_thread(hit.thread_id)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ IS_PY36 = sys.version_info[0] == 3 and sys.version_info[1] == 6
|
|||
TEST_CYTHON = os.getenv('PYDEVD_USE_CYTHON', None) == 'YES'
|
||||
IS_APPVEYOR = os.environ.get('APPVEYOR', '') in ('True', 'true', '1')
|
||||
|
||||
SKIP_FRAME_EVAL_TESTS = False
|
||||
|
||||
|
||||
class WriterThreadStepAndResume(debugger_unittest.AbstractWriterThread):
|
||||
|
||||
|
|
@ -197,7 +199,7 @@ class WriterThreadAddTerminationExceptionBreak(debugger_unittest.AbstractWriterT
|
|||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
True,
|
||||
SKIP_FRAME_EVAL_TESTS,
|
||||
reason='Frame eval is not currently meant to be used in the debugger and tests are flaky.\n'
|
||||
'Feature must be reviewed to be included again.\n'
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue