Команда 'n' vs 's' для отладчика Python (pdb)Python

Программы на Python
Ответить
Anonymous
 Команда 'n' vs 's' для отладчика Python (pdb)

Сообщение Anonymous »

Я новичок в pdb и пытаюсь научиться. Есть одна вещь, которая меня очень беспокоит. Во многих примерах, которые я читал в блогах, упоминается такой код:

Код: Выделить всё

import pdb

def buggy_function(x):
result = 0
for i in range(x):
result += i / (i - 4)
return result

# Use pdb.run() to debug
pdb.run("buggy_function(10)")
Они упоминают следующее:

[*]Когда вы запускаете код, отладчик запускается перед выполнением buggy_function(10)
[*]В командной строке (Pdb) вам нужно использовать n для входа в функцию buggy_function.

Пример вывода сеанса для блога был таким: ниже:

Код: Выделить всё

> (1)()
(Pdb) n
> (1)()
(Pdb) s
> (1)buggy_function()
(Pdb) p x
10
(Pdb) n
> (3)buggy_function()
(Pdb) p i
4
(Pdb) p result
6.0
(Pdb) c
ZeroDivisionError: division by zero
Однако, когда я запускаю программу (используя > python ./main.py), я получаю следующий вывод:

Код: Выделить всё

(codeexec) PS C:\codeexec> python .\main.py
> (1)()
(Pdb) n
ZeroDivisionError: division by zero
> (1)()
(Pdb)
Похоже, что нажатие n в этот момент заставило программу запустить функцию и вернуть исключение.
Однако, если я начну с s< /code>, тогда элемент управления правильно войдет в метод

Код: Выделить всё

(codeexec) PS C:\codeexec> python .\main.py
> (1)()
(Pdb) s
--Call--
> c:\codeexec\main.py(3)buggy_function()
-> def buggy_function(x):
(Pdb) n
> c:\codeexec\main.py(4)buggy_function()
-> result = 0
(Pdb) n
> c:\codeexec\main.py(5)buggy_function()
-> for i in range(x):
(Pdb) n
> c:\codeexec\main.py(6)buggy_function()
-> result += i / (i - 4)
(Pdb) p i
0
(Pdb)
Я не понимаю, почему так много блогов настаивают на вводе n для отладки функции, когда нам нужно нажать s. Я что-то упустил?

Подробнее здесь: https://stackoverflow.com/questions/792 ... bugger-pdb
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»