株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

デバッグしたい箇所に、「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

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)