Skip to content

Conversation

@tawsifazad23
Copy link
Contributor

Closes #62

Problem

Upgrading to IPython 9.x changed debugger internals:

  • self.color_scheme_table.active_colors was removed.
  • Pdb.print_stack_entry() no longer accepts context=.

Both changes caused ChatDBG to crash during prompt building and why execution.


Fix

  • Added _resolve_colors():
    • Honors CHATDBG_NO_COLOR=1 for CI/no-ANSI setups.
    • Tries legacy color_scheme_table.active_colors path.
    • Falls back to a no-color palette for IPython 9+.
  • Wrapped print_stack_entry(..., context=context) in try/except TypeError
    to support both IPython 8 and 9.

Validation

✅ macOS • Python 3.13.5

  • ipython==9.6.0: chatdbg -c continue boom.py → why works cleanly.
  • ipython==8.35.0: still works as before.
  • CHATDBG_NO_COLOR=1: disables color; no crash.

Notes

  • Patch tested interactively using boom.py and post-mortem debugging.
  • Old errors (color_scheme_table AttributeError, context TypeError) no longer appear.
  • Verified on Python 3.13.5; expected to remain compatible with Python 3.11 – 3.12.

Comment on lines +523 to +528
# IPython ≤ 8.x accepts 'context='; IPython 9.x removed it.
try:
self.print_stack_entry(frame_lineno, context=context)
except TypeError:
# Fallback for IPython 9.x (no 'context' kwarg)
self.print_stack_entry(frame_lineno)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just update pyproject.toml, set the minimum version for IPython to 9, and keep only one version for this code.

I am curious, can you share what's the difference in output between these two versions?

Comment on lines +111 to +127
def _resolve_colors(self):
"""
Return a colors object compatible with what ChatDBG expects.
- Honors CHATDBG_NO_COLOR=1 (no ANSI escapes).
- Tries legacy IPython color internals (≤ 8.x).
- Falls back safely for IPython 9+ where internals moved/changed.
"""
# Allow users/CI to force no color
if os.getenv("CHATDBG_NO_COLOR") == "1":
return types.SimpleNamespace(excName="", Normal="")
# Try legacy IPython path (works on IPython ≤ 8.x)
try:
# Some environments may still provide active_colors
return self.color_scheme_table.active_colors # noqa: attribute-defined-outside-init
except Exception:
# Safe fallback for IPython 9+ (no color)
return types.SimpleNamespace(excName="", Normal="")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So colors don't work anymore with the latest IPython versions? Hmmmm, not a fan. Wonder what a workaround could be.

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.

ChatDBG breaks with latest IPython

2 participants