homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Pdb does not stop at a breakpoint set on the line of a function definition
Type: behavior Stage:
Components: Library (Lib) Versions: Python 3.2, Python 3.3, Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: georg.brandl, xdegaye
Priority: normal Keywords: patch

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)<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.
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:30adminsetgithub: 59013
2012年05月25日 11:56:43xdegayesetmessages: + msg161574
2012年05月18日 18:10:37terry.reedysetnosy: + georg.brandl
2012年05月14日 15:36:58xdegayecreate

AltStyle によって変換されたページ (->オリジナル) /