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

gh-125884: Support breakpoint on functions with annotations #125892

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

gaogaotiantian
Copy link
Member

@gaogaotiantian gaogaotiantian commented Oct 23, 2024

close #125885 as well.

Two things are fixed:

  1. The regex for a function definition is improved to include generics
  2. We do not rely on the function code object being the first const in the compiled code object. We search for it.

@gaogaotiantian gaogaotiantian changed the title Support breakpoint on functions with annotations gh-125884: Support breakpoint on functions with annotations Oct 23, 2024
@gaogaotiantian gaogaotiantian added needs backport to 3.12 bug and security fixes needs backport to 3.13 bugs and security fixes labels Oct 23, 2024
Lib/pdb.py Outdated
Comment on lines 142 to 147
for const in code.co_consts:
if isinstance(const, CodeType) and const.co_name == funcname:
funccode = const
break
else:
continue
Copy link
Member

Choose a reason for hiding this comment

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

I think this is easier to read:

Suggested change
for const in code.co_consts:
if isinstance(const, CodeType) and const.co_name == funcname:
funccode = const
break
else:
continue
try:
next(c for c in code.co_consts if isinstance(c, CodeType) and c.co_name == funcname)
except StopIteration:
continue

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't that's equivalent. The assignment to funccode is missing. Personally I think the original is easier to read. The modified one is definitely shorter, but the usage of next and StopIteration is pretty tricky.

Copy link
Member Author

Choose a reason for hiding this comment

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

Hmm, I don't think the continue part is correct, that should not happen. I'll try to fix it.

@@ -363,6 +363,42 @@ def test_pdb_breakpoint_commands():
4
"""

def test_pdb_breakpoint_on_annotated_function_def():
Copy link
Member

Choose a reason for hiding this comment

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

Are there tests for functions with decorators?

Copy link
Member Author

Choose a reason for hiding this comment

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

Not really. What's the expected behavior? We can't resolve the decorator in pdb, we will only add the breakpoint inside the decorated function.

Copy link
Member Author

Choose a reason for hiding this comment

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

Well, that's not true.. It depends on whether the function is in the name space. If it's already in the namespace, we will set the breakpoint in the decorator.

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

Successfully merging this pull request may close these issues.

pdb fails when setting a breakpoint to function names with generics-type annotations
2 participants