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
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…
Reference in New Issue