В чем разница между точкой останова с аргументом для условия и точкой останова для условия?

Из Библиотеки 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()
Другие вопросы по тегам