デバッグしたい箇所に、「breakpoint()」か「import pdb; pdb.set_trace()」を書く
def find_even_numbers(numbers):
even_numbers = []
for number in numbers:
if number % 2 == 0:
even_numbers.append(number)
return even_numbers
def sum_even_numbers(numbers):
even_numbers = find_even_numbers(numbers)
total = sum(even_numbers)
breakpoint() # ←これ
return total
# メイン処理
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
total_even = sum_even_numbers(numbers)
print(f"The sum of even numbers is: {total_even}")
この状態で、実行すると、対話式プロンプトが返り、処理がbreakpoint部分でストップする。
➜ pdb-test python3 app.py > /Users/yuta/vamdemic/pdb-test/app.py(13)sum_even_numbers() -> return total (Pdb)
おそらくよく使うであろうコマンドを打っていきます。
p 変数を表示する
(Pdb) p numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (Pdb) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (Pdb) p total 30
l 現在停止しているソースコードの部分を表示する
(Pdb) l 8 9 def sum_even_numbers(numbers): 10 even_numbers = find_even_numbers(numbers) 11 total = sum(even_numbers) 12 breakpoint() 13 -> return total 14 15 16 # メイン処理 17 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 18 total_even = sum_even_numbers(numbers) (Pdb)
n 現在行を実行して、次の行へ進む
➜ pdb-test python3 app.py
> /Users/yuta/vamdemic/pdb-test/app.py(13)sum_even_numbers()
-> return total
(Pdb) n
--Return--
> /Users/yuta/vamdemic/pdb-test/app.py(13)sum_even_numbers()->30
-> return total
(Pdb) n
> /Users/yuta/vamdemic/pdb-test/app.py(19)<module>()
-> print(f"The sum of even numbers is: {total_even}")
(Pdb) n
The sum of even numbers is: 30
--Return--
> /Users/yuta/vamdemic/pdb-test/app.py(19)<module>()->None
-> print(f"The sum of even numbers is: {total_even}")
(Pdb) n
c 次のブレークポイントまで実行(今回の場合、ブレークポイントは1回しか通らないので、再就業まで実行)
➜ pdb-test python3 app.py > /Users/yuta/vamdemic/pdb-test/app.py(13)sum_even_numbers() -> return total (Pdb) c The sum of even numbers is: 30
