Как войти в конкретный вызываемый объект в PDB, если в одной строке вызывается несколько? - PullRequest
1 голос
/ 22 января 2020

Часто, когда я перебираю код в PDB, я попадаю в строки вроде этого:

foo(bar(), qux())

В этом случае мне интересно войти в foo(), но не в bar() или qux().

Как вы это делаете в PDB?

Если я просто введу команду step в приглашении, PDB проследит до bar(), а затем qux(), и только потом в foo() - что является огромным неудобством, когда bar() и qux() являются длинными функциями.

1 Ответ

1 голос
/ 22 января 2020

Я полагаю, что это ответ, а не просто комментарий.

Когда вы собираетесь запустить строку, вызывая:

foo(bar(), qux())

Добавьте временную точку останова на foo(), используя:

tbreak foo

А потом просто:

c

или continue. Это будет запускать bar и qux и останавливаться при достижении foo кодового блока.

Вы также можете просто использовать обычный b(reak).

В качестве альтернативы, вы можете s(tep) в bar и qux, но используйте:

r

или return. Чтобы просто запустить их до возвращения от них. С «только» двумя функциями в качестве параметров, это, вероятно, все еще относительно невыносимое неудобство.

Вы также можете расширить идею точки останова, сделав ее условной, например, если вы знаете, что хотите отлаживать foo только после x было присвоено значение, равное единице:

b foo, x == 1

Таким образом, вы можете (или n(ext)) проходить по своему коду и запускать точку останова только при выполнении условия.

...