Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set sys.last_value / sys.last_exc before entering the debugger #380

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

saharan-deshaw
Copy link
Collaborator

@saharan-deshaw saharan-deshaw commented Nov 22, 2024

Background:
In commit 6eae532, we introduced a new utility in pyflyby named saveframe. This utility is designed to save error stack frames upon an exception. Users can also enter a debugger after an exception (using ipdb.pm()) and call saveframe to dump a specific frame.

saveframe relies on sys.last_value (or sys.last_exc in Python 3.12) to retrieve the last exception object raised. These attributes are automatically set by Python after an uncaught exception occurs.

Issue:
When a user executes a script or command using py <some_script_or_command> or employs the @debug_on_exception decorator, the exception is caught, and the debugger is invoked. Consequently, sys.last_value (or sys.last_exc) is not set. If the user attempts to call saveframe within the debugger, it fails because the necessary exception information is unavailable.

Solution:
In this commit, we modified the code to explicitly set sys.last_value (or sys.last_exc) after an exception is caught and before entering the debugger. This ensures that users can directly enter the debugger using py, and successfully call the pyflyby.saveframe function.

Request: PyInf#12047

**Background:**
In commit 6eae532, we introduced a new utility in pyflyby named `saveframe`.
This utility is designed to save error stack frames upon an exception. Users can
also enter a debugger after an exception (using ipdb.pm()) and call `saveframe`
to dump a specific frame.

`saveframe` relies on `sys.last_value` (or `sys.last_exc` in Python 3.12) to
retrieve the last exception object raised. These attributes are automatically set by
Python after an uncaught exception occurs.

**Issue:**
When a user executes a script or command using `py <some_script_or_command>` or employs
the `@debug_on_exception` decorator, the exception is caught, and the debugger is invoked.
Consequently, `sys.last_value` (or `sys.last_exc`) is not set. If the user attempts to
call `saveframe` within the debugger, it fails because the necessary exception
information is unavailable.

**Solution:**
In this commit, we modified the code to explicitly set `sys.last_value` (or `sys.last_exc`)
after an exception is caught and before entering the debugger. This ensures that users can
directly enter the debugger and successfully call the `pyflyby.saveframe` function.

Request: PyInf#12047
@saharan-deshaw
Copy link
Collaborator Author

cc @sac111gp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant