mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Sjoerd Mullender:
When you set a breakpoint on a function with a multi-line argument list, the breakpoint is actually set on the second line of the arguments instead of the first line of the body. This patch fixes that.
This commit is contained in:
parent
0c3208aa62
commit
e85c93f521
1 changed files with 21 additions and 15 deletions
36
Lib/pdb.py
36
Lib/pdb.py
|
@ -329,29 +329,35 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
# code parse time. We don't want that, so all breakpoints
|
||||
# set at 'def' statements are moved one line onward
|
||||
if line[:3] == 'def':
|
||||
incomment = ''
|
||||
instr = ''
|
||||
brackets = 0
|
||||
while 1:
|
||||
skipone = 0
|
||||
for c in line:
|
||||
if instr:
|
||||
if skipone:
|
||||
skipone = 0
|
||||
elif c == '\\':
|
||||
skipone = 1
|
||||
elif c == instr:
|
||||
instr = ''
|
||||
elif c == '#':
|
||||
break
|
||||
elif c in ('"',"'"):
|
||||
instr = c
|
||||
elif c in ('(','{','['):
|
||||
brackets = brackets + 1
|
||||
elif c in (')','}',']'):
|
||||
brackets = brackets - 1
|
||||
lineno = lineno+1
|
||||
line = linecache.getline(filename, lineno)
|
||||
if not line:
|
||||
print 'end of file'
|
||||
return 0
|
||||
line = string.strip(line)
|
||||
if incomment:
|
||||
if len(line) < 3: continue
|
||||
if (line[-3:] == incomment):
|
||||
incomment = ''
|
||||
continue
|
||||
if not line: continue # Blank line
|
||||
if len(line) >= 3:
|
||||
if (line[:3] == '"""'
|
||||
or line[:3] == "'''"):
|
||||
if line[-3:] == line[:3]:
|
||||
# one-line string
|
||||
continue
|
||||
incomment = line[:3]
|
||||
continue
|
||||
if line[0] != '#': break
|
||||
if brackets <= 0 and line[0] not in ('#','"',"'"):
|
||||
break
|
||||
return lineno
|
||||
|
||||
def do_enable(self, arg):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue