В чем разница между точкой останова с аргументом для условия и точкой останова для условия?
Из Библиотеки Python
b(reak) [[имя файла:]lineno | функция [, условие]]
С аргументом белья установите разрыв в текущем файле. С помощью аргумента функции установите разрыв для первого исполняемого оператора в этой функции. Для номера строки может быть указан префикс имени файла и двоеточия, чтобы указать точку останова в другом файле (возможно, еще не загруженном). Файл ищется по sys.path. Обратите внимание, что каждой точке останова присваивается номер, к которому относятся все остальные команды точки останова.
Если присутствует второй аргумент, это выражение, которое должно принимать значение true, прежде чем будет остановлена точка останова.
Без аргумента перечислите все разрывы, в том числе для каждой точки останова, количество раз, когда эта точка останова была достигнута, текущий счетчик игнорирований и соответствующее условие, если оно есть.
условие bpnumber [условие]
Условие - это выражение, которое должно оцениваться как true, прежде чем будет остановлена точка останова Если условие отсутствует, любое существующее условие удаляется; точка останова становится безусловной.
В чем разница между точкой останова со вторым аргументом для условия (первая часть в кавычке) и точкой останова условия (вторая часть в кавычке)? Они выглядят одинаково для меня из цитаты.
1 ответ
Команда b определяет точку останова. Вы можете указать условие, но вам не нужно это делать.
Команды условия нуждаются в точке останова, которая уже определена (т. Е. Нужна команда b раньше), и изменяет ее условие.
Следующие две команды отладчика можно считать равными:
b debugme:3,x==100
а также
b debugme:3
condition 1 x==100
Пойдем практично:
Создайте следующий скрипт Python и назовите его debugme.py
:
def myfunction():
for x in range(0,200):
print x
if __name__ == "__main__":
myfunction()
Прохождение синтаксиса 1 (б с условием):
C:\tmp\py>C:\Python27\python.exe
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb
>>> import debugme
>>> pdb.run('debugme.myfunction()')
> <string>(1)<module>()
(Pdb) b debugme:3,x==100 <---- note this line
Breakpoint 1 at c:\tmp\py\debugme.py:3
(Pdb) c
0
1
2
3
...
97
98
99
> c:\tmp\py\debugme.py(3)myfunction()
-> print x
(Pdb) p x
100
(Pdb) q
>>> exit()
Краткое описание синтаксиса 2 (b без условия плюс условие):
C:\tmp\py>C:\Python27\python.exe
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb
>>> import debugme
>>> pdb.run('debugme.myfunction()')
> <string>(1)<module>()
(Pdb) b debugme:3 <---- note this line
Breakpoint 1 at c:\tmp\py\debugme.py:3
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at c:\tmp\py\debugme.py:3
(Pdb) condition 1 x==100 <---- and this one
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at c:\tmp\py\debugme.py:3
stop only if x==100
(Pdb) c
0
1
2
3
...
97
98
99
> c:\tmp\py\debugme.py(3)myfunction()
-> print x
(Pdb) p x
100
(Pdb) q
>>> exit()