[Python-checkins] r86861 - in python/branches/py3k: Doc/library/pdb.rst Lib/bdb.py Lib/pdb.py Lib/test/test_pdb.py Misc/NEWS

senthil.kumaran python-checkins at python.org
Mon Nov 29 12:54:17 CET 2010


Author: senthil.kumaran
Date: Mon Nov 29 12:54:17 2010
New Revision: 86861
Log:
Fix #10561 - Fix pdb behavior. Delete the breakpoints by breakpoint number.
Handle multiple breakpoints at same line. Update docs/test. 
Patch by Xavier de Gaye.
Modified:
 python/branches/py3k/Doc/library/pdb.rst
 python/branches/py3k/Lib/bdb.py
 python/branches/py3k/Lib/pdb.py
 python/branches/py3k/Lib/test/test_pdb.py
 python/branches/py3k/Misc/NEWS
Modified: python/branches/py3k/Doc/library/pdb.rst
==============================================================================
--- python/branches/py3k/Doc/library/pdb.rst	(original)
+++ python/branches/py3k/Doc/library/pdb.rst	Mon Nov 29 12:54:17 2010
@@ -256,8 +256,9 @@
 Temporary breakpoint, which is removed automatically when it is first hit.
 The arguments are the same as for :pdbcmd:`break`.
 
-.. pdbcommand:: cl(ear) [bpnumber [bpnumber ...]]
+.. pdbcommand:: cl(ear) [filename:lineno | bpnumber [bpnumber ...]]
 
+ With a *filename:lineno* argument, clear all the breakpoints at this line.
 With a space separated list of breakpoint numbers, clear those breakpoints.
 Without argument, clear all breaks (but first ask confirmation).
 
Modified: python/branches/py3k/Lib/bdb.py
==============================================================================
--- python/branches/py3k/Lib/bdb.py	(original)
+++ python/branches/py3k/Lib/bdb.py	Mon Nov 29 12:54:17 2010
@@ -252,6 +252,12 @@
 list.append(lineno)
 bp = Breakpoint(filename, lineno, temporary, cond, funcname)
 
+ def _prune_breaks(self, filename, lineno):
+ if (filename, lineno) not in Breakpoint.bplist:
+ self.breaks[filename].remove(lineno)
+ if not self.breaks[filename]:
+ del self.breaks[filename]
+
 def clear_break(self, filename, lineno):
 filename = self.canonic(filename)
 if not filename in self.breaks:
@@ -263,17 +269,15 @@
 # pair, then remove the breaks entry
 for bp in Breakpoint.bplist[filename, lineno][:]:
 bp.deleteMe()
- if (filename, lineno) not in Breakpoint.bplist:
- self.breaks[filename].remove(lineno)
- if not self.breaks[filename]:
- del self.breaks[filename]
+ self._prune_breaks(filename, lineno)
 
 def clear_bpbynumber(self, arg):
 try:
 bp = self.get_bpbynumber(arg)
 except ValueError as err:
 return str(err)
- self.clear_break(bp.file, bp.line)
+ bp.deleteMe()
+ self._prune_breaks(bp.file, bp.line)
 
 def clear_all_file_breaks(self, filename):
 filename = self.canonic(filename)
Modified: python/branches/py3k/Lib/pdb.py
==============================================================================
--- python/branches/py3k/Lib/pdb.py	(original)
+++ python/branches/py3k/Lib/pdb.py	Mon Nov 29 12:54:17 2010
@@ -774,7 +774,8 @@
 except ValueError as err:
 self.error(err)
 else:
- self.clear_break(bp.file, bp.line)
+ self.clear_bpbynumber(i)
+ #self.clear_break(bp.file, bp.line)
 self.message('Deleted %s' % bp)
 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
 
Modified: python/branches/py3k/Lib/test/test_pdb.py
==============================================================================
--- python/branches/py3k/Lib/test/test_pdb.py	(original)
+++ python/branches/py3k/Lib/test/test_pdb.py	Mon Nov 29 12:54:17 2010
@@ -192,6 +192,9 @@
 ... 'ignore 1 10',
 ... 'condition 1 1 < 2',
 ... 'break 4',
+ ... 'break 4',
+ ... 'break',
+ ... 'clear 3',
 ... 'break',
 ... 'condition 1',
 ... 'enable 1',
@@ -220,6 +223,17 @@
 New condition set for breakpoint 1.
 (Pdb) break 4
 Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
+ (Pdb) break 4
+ Breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
+ (Pdb) break
+ Num Type Disp Enb Where
+ 1 breakpoint keep no at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
+ stop only if 1 < 2
+ ignore next 10 hits
+ 2 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
+ 3 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
+ (Pdb) clear 3
+ Deleted breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
 (Pdb) break
 Num Type Disp Enb Where
 1 breakpoint keep no at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
@@ -244,10 +258,10 @@
 Clear all breaks? y
 Deleted breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
 (Pdb) tbreak 5
- Breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
+ Breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
 (Pdb) continue
 2
- Deleted breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
+ Deleted breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
 > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(5)test_function()
 -> print(3)
 (Pdb) break
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Mon Nov 29 12:54:17 2010
@@ -49,6 +49,8 @@
 - Issue #10242: Fixed implementation of unittest.ItemsEqual and gave it
 a new more informative name, unittest.CountEqual.
 
+- Issue #10561: In pdb, clear the breakpoints by the breakpoint number.
+
 - Issue #2986: difflib.SequenceMatcher gets a new parameter, autojunk, which
 can be set to False to turn off the previously undocumented 'popularity'
 heuristic. Patch by Terry Reedy and Eli Bendersky.


More information about the Python-checkins mailing list

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