Issue 14808: Pdb does not stop at a breakpoint set on the line of a function definition (original) (raw)

Issue14808

Created on 2012-05-14 15:36 by xdegaye, last changed 2022-04-11 14:57 by admin.

Files
File name Uploaded Description Edit
pdb_default.patch xdegaye,2012-05-14 15:36 review
Messages (2)
msg160629 - (view) Author: Xavier de Gaye (xdegaye) * (Python triager) Date: 2012-05-14 15:36
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)() -> 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)() -> def foo(): (Pdb) continue > /path_to/main.py(9)() -> 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.
msg161574 - (view) Author: Xavier de Gaye (xdegaye) * (Python triager) Date: 2012-05-25 11:56
Parsing the modules source seems a better way to fix this problem, see issue 14913.
History
Date User Action Args
2022-04-11 14:57:30 admin set github: 59013
2012-05-25 11:56:43 xdegaye set messages: +
2012-05-18 18:10:37 terry.reedy set nosy: + georg.brandl
2012-05-14 15:36:58 xdegaye create