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

Pdb does not stop at a breakpoint set on the line of a function definition #59013

Closed
xdegaye mannequin opened this issue May 14, 2012 · 6 comments
Closed

Pdb does not stop at a breakpoint set on the line of a function definition #59013

xdegaye mannequin opened this issue May 14, 2012 · 6 comments
Labels
stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error

Comments

@xdegaye
Copy link
Mannequin

xdegaye mannequin commented May 14, 2012

BPO 14808
Nosy @birkenfeld, @xdegaye
Files
  • pdb_default.patch
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2012-05-14.15:36:58.639>
    labels = ['type-bug', 'library']
    title = 'Pdb does not stop at a breakpoint set on the line of a function definition'
    updated_at = <Date 2012-05-25.11:56:43.789>
    user = 'https://github.com/xdegaye'

    bugs.python.org fields:

    activity = <Date 2012-05-25.11:56:43.789>
    actor = 'xdegaye'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Library (Lib)']
    creation = <Date 2012-05-14.15:36:58.639>
    creator = 'xdegaye'
    dependencies = []
    files = ['25578']
    hgrepos = []
    issue_num = 14808
    keywords = ['patch']
    message_count = 2.0
    messages = ['160629', '161574']
    nosy_count = 2.0
    nosy_names = ['georg.brandl', 'xdegaye']
    pr_nums = []
    priority = 'normal'
    resolution = None
    stage = None
    status = 'open'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue14808'
    versions = ['Python 2.7', 'Python 3.2', 'Python 3.3']

    Linked PRs

    @xdegaye
    Copy link
    Mannequin Author

    xdegaye mannequin commented May 14, 2012

    In the following test both breakpoints are set on the line of a
    function definition. However pdb does not stop when entering foo whose
    breakpoint has been set with 'break 1' while pdb stops when entering
    bar whose breakpoint has been set with 'break bar'. The breakpoint
    table display is identical for both breakpoints. This is inconsistent
    and confusing.

    === main.py ==================================
    1 def foo():
    2 pass
    3
    4 def bar():
    5 pass
    6
    7 def main():
    8 foo()
    9 bar()
    10
    11 import pdb; pdb.runcall(main)
    =================================================

    $ python main.py
    > /path_to/main.py(8)main()
    -> foo()
    (Pdb) break 1
    Breakpoint 1 at /path_to/main.py:1
    (Pdb) break bar
    Breakpoint 2 at /path_to/main.py:4
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at /path_to/main.py:1
    2   breakpoint   keep yes   at /path_to/main.py:4
    (Pdb) continue
    > /path_to/main.py(5)bar()
    -> pass
    (Pdb) continue
    $

    =================================================

    The reverse occurs in the following test where pdb stops only at the
    execution of the function definition when the breakpoint has been set
    with a line number.

    === main.py ==================================
    1 x = 1
    2
    3 def foo():
    4 pass
    5
    6 def bar():
    7 pass
    8
    9 x = 2
    =================================================

    $ python -m pdb main.py
    > /path_to/main.py(1)<module>()
    -> x = 1
    (Pdb) break 3
    Breakpoint 1 at /path_to/main.py:3
    (Pdb) break bar
    Breakpoint 2 at /path_to/main.py:6
    (Pdb) break 9
    Breakpoint 3 at /path_to/main.py:9
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at /path_to/main.py:3
    2   breakpoint   keep yes   at /path_to/main.py:6
    3   breakpoint   keep yes   at /path_to/main.py:9
    (Pdb) continue
    > /path_to/main.py(3)<module>()
    -> def foo():
    (Pdb) continue
    > /path_to/main.py(9)<module>()
    -> x = 2
    (Pdb)

    =================================================

    The following patch fixes both inconsistencies by having pdb stop when
    entering a function and at the execution of a definition whatever the
    method used to set the breakpoint (line number or function name).

    Two test cases are included in the patch.

    @xdegaye xdegaye mannequin added stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error labels May 14, 2012
    @xdegaye
    Copy link
    Mannequin Author

    xdegaye mannequin commented May 25, 2012

    Parsing the modules source seems a better way to fix this problem, see bpo-14913.

    @gaogaotiantian
    Copy link
    Member

    With #110852, break func will assign the correct line number for function that is already defined.

    @hugovk
    Copy link
    Member

    hugovk commented Nov 27, 2023

    Fixed by #110582, thanks!

    @hugovk hugovk closed this as completed Nov 27, 2023
    @gaogaotiantian
    Copy link
    Member

    Actually, there's still a case that's inconsistent. I did not figure out a solution then but I have a patch now. Let's reopen this and close it after the new PR is merged.

    @gaogaotiantian
    Copy link
    Member

    With #112470 merged, this problem is fully fixed.

    aisk pushed a commit to aisk/cpython that referenced this issue Feb 11, 2024
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants