はじめに
お久しぶりです。Tomita Kentaroと申します。本日は仕事をしていてデバッグの重要性に気づいたため備忘録として、この記事を作成いたします。
デバッグとは何か
デバッグとはバクなどの不具合を見つけて修正するプロセスのことです。もっと簡単に言うと、プログラムが正しく動作しているのか確認して、動作がおかしければ修正を行う事を指します。
なぜデバッグが必要なのか
どんなプログラムでも、バグが存在する可能性はあります。それも、複雑なプログラムになればなるほどです。特に最近では、ChatGPTなどを使ってプログラミングするプロンプトエンジニアリングが流行っています。最近のAIは、ある程度複雑なプログラムでも作ってくれます。しかし、そのプログラムが必ずしも正しいとは限りません。そこで、重要になってくるのが、このデバッグです。
デバッグの例
試しに、以下のプログラムをデバッグしてみましょう。
x = 0
y = 10
for i in range(y + 1):
x += i
print(x)
すると、1〜10までをした合計の55が表示されます。
$ python3 Loop.py
55
しかし、これでは、どのように55という計算結果になったかわかりづらいです。その時に使えるのが、この記事に書いてあるデバッグ機能になります。本来は様々なコマンドや使い方がありますが、今回使うのはpdb
のn
コマンドとp
コマンドだけです。デバッグを行った結果は、以下の様になります。
$ python3 -m pdb Loop.py
> /Users/TomitaKentaro/Loop.py(1)<module>()
-> x = 0
(Pdb) n
> /Users/TomitaKentaro/Loop.py(2)<module>()
-> y = 10
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) p y
10
(Pdb) p x
0
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) p x
0
(Pdb) p i
0
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) p x
15
(Pdb) p i
6
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(4)<module>()
-> x += i
(Pdb) p x
45
(Pdb) p i
10
(Pdb) n
> /Users/TomitaKentaro/Loop.py(3)<module>()
-> for i in range(y + 1):
(Pdb) n
> /Users/TomitaKentaro/Loop.py(5)<module>()
-> print(x)
(Pdb) n
55
--Return--
> /Users/TomitaKentaro/Loop.py(5)<module>()->None
-> print(x)
(Pdb)
結果は、以上の様になります。n
コマンドでプログラムを一行ずつ実行して、p
コマンドで現時点での変数の値を確認しています。
最後に
今回も、気づいた事を簡単に説明してみました。仕事上では、Pythonは使っていないため、この方法は使えませんが...。どの言語にも対応できる様、様々なデバッグ方法を勉強してみたいと思いました。この記事に、間違いや、アドバイスがありましたら、コメントなどで教えていただけると嬉しいです。