Python 関数のデバッグ方法と「脳内デバッグ」の鍛え方

Python
この記事は約7分で読めます。

こんにちは、ナナです。

前回のデバッグ技術の記事『Python プログラムが思い通りに動かない悩み解決【デバッガ】』では、プログラムをする上での基礎的なデバッグ方法を解説しました。

新しく『関数』という概念を手に入れたのであれば、さらなるデバッグ技術を手に入れましょう。

本記事では次の疑問点を解消する内容となっています。

本記事で学習できること
  • 「ステップオーバー」以外のステップ実行の種類とは?
  • 「ステップオーバー」と「ステップイン」って何が違うの?
  • 「ステップアウト」と「カーソルの位置まで実行」の使い方とは?
  • 「脳内デバッグ」のススメと鍛錬方法とは?

では、『デバッガ』の使い方を解説していきましょう。

スポンサー

デバッグ技術 レベル2:『ステップイン』と『ステップアウト』

前回「レベル1」で学んだデバッグ技術は最低限の基礎的なものでした。「レベル2」ではもう少し踏み込んだデバッグ手法について解説していきましょう。

「レベル2」の読者としては、次の人を対象としています。

デバッグ技術「レベル2」を学ぶ条件
  • 「関数」の概要と使い方を理解している
  • input関数の使い方を理解している

『ステップオーバー』以外のステップ実行の種類

前回の記事では『ステップオーバー』の使い方を解説しましたが、ステップ実行には他にも種類があります。

ステップ実行の種類

各ステップ実行の機能は次のものになります。正しく使うためには、「関数」の概念を理解しておく必要があります。

ステップオーバー次の行へ実行を進める。
関数の呼び出しでも、関数の中には入らない。
ステップイン次の行へ実行を進める。
ただし、関数の場合は関数の中に実行を進める。
ステップアウト関数の呼び出し元まで実行を進める。
カーソルの位置まで実行カーソルの位置まで実行を進める。

ステップ実行の扱いの違いを知るために、次のプログラムをベースに解説をします。

# 三角形の面積を計算する
def get_triangle_area(bottom, height):
    area = bottom * height / 2.0

    return area


g_bottom = 10       # 底辺
g_height = 15       # 高さ

# 三角形の面積を取得
g_area = get_triangle_area(g_bottom, g_height)

print("三角形の面積は", g_area, "です")

三角形の面積を求めるためのget_triangle_area関数が定義されています。

ナナ
ナナ

PyCharm以外の統合開発環境においても、この4つの「ステップ実行」の機能は搭載されていることでしょう。扱い方は一緒なので、一度使い方を覚えてしまえば、どの環境でも利用できます。

『ステップオーバー』と『ステップイン』の違い

この2つは初心者のうちは区別をつけられないことが多く、「何が違うの?」と迷う方が結構いるんです。

『ステップオーバー』と『ステップイン』は関数呼び出しではない処理を動かす時には、「次の処理にステップ実行をする」という挙動は同じです。

違いが出るのは、次のようにステップ実行が「関数」を呼び出す行に差し掛かったときです。

ステップオーバーとステップインの違い

このように、関数を実行したものとして次の行に進めるのが『ステップオーバー』、「関数」の中に処理を進めるのが『ステップイン』です。

ナナ
ナナ

『ステップイン』の『イン』とは、「関数の中に入る(イン)」という意味なのです。そう理解すると、違いを覚えやすいですね。

『ステップアウト』の使い方

『ステップイン』の意味が分かると『ステップアウト』の意味もわかりますね。『ステップアウト』とは「関数の外に出る(アウト)」という意味です。

関数の中の処理をステップ実行している際に、『ステップアウト』をすると関数の呼び出し元まで実行を進めることになります。

ステップアウトとは

実際の関数は数十行といった大きな処理になっていることも多く、「もうここまでで見るのはOKだから、呼び出し元に処理を移動させたい」というシーンで使います。

『カーソルの位置まで実行』の使い方

通常「デバッグ実行」はステップ実行によって1行ずつ進めるか、『ブレークポイント』を設定しておくことで、一度のそのポイントまで処理を進めるという2つの選択肢があります。

『カーソルの位置まで実行』は、その名の通りカーソル位置が存在する行まで、一気に処理を進めることができます。

カーソルの位置まで実行

ブレークポイントをわざわざ設定することなく、一度に複数行を進めることができます。

ナナ
ナナ

これらの『ステップ実行』のコマンドを使いこなしながら、デバッグ作業を効率よく行うことです。

「効率よく」というのは、最初からできるわけでないので、少しずつ使いながら作業に慣れていく必要があります。積極的にステップ実行を使って慣れていくことです。

スポンサー

デバッガを使ったユーザー入力の受け取り方

ナナ
ナナ

input関数を利用することで、ユーザーからの情報をキーボードから受け付けることができまたね。

デバッグ中も、もちろんユーザー入力を受け付けることは可能です。その方法を解説しておきましょう。

input関数の使い方は習得していますか?

まだ習得していない方は『Python input関数【ユーザーからの入力を待ち受ける方法】』の記事を見てから読み進めるとよいでしょう。

それでは次のようにinput関数を呼び出すプログラムをデバッグしてみましょう。

# 三角形の面積を計算する
def get_triangle_area(bottom, height):
    area = bottom * height / 2.0

    return area


g_bottom = int(input("三角形の底辺を入力してください\n"))
g_height = int(input("三角形の高さを入力してください\n"))

# 三角形の面積を取得
g_area = get_triangle_area(g_bottom, g_height)

print("三角形の面積は", g_area, "です")

input関数をステップ実行すると、ユーザー入力待機状態になります。この場合は、「デバッグ画面」の「コンソール」を選択することで、キー入力が可能になります。

デバッガによるinput関数の入力
ナナ
ナナ

「デバッガ-」と「コンソール」のタブを切り替えながらデバッグをしていくことになります。

スポンサー

『脳内デバッグ』鍛錬への道

プログラミング初心者の方には、絶対にやってほしいことがあります。それは自分の作ったプログラムを順に動かしながら考察することです。

『脳内デバッグ』とは何なのか?

『脳内デバッグ』

それは、『デバッガ』を使わずして、デバッガ相当の動きを頭の中でイメージする技術です。

脳内デバッグ

経験豊かな開発者は、この技術を備えています。しかし、それは天賦の才などではなく、努力と訓練によって鍛え上げられた技術なんです。

ナナ
ナナ

実際の開発の現場では、こんな人は結構たくさんいます。

初心者の人は「なんでこんなにすぐにわかるの?」と思うかもしれませんが、それは頭の中でプログラムを動かすことができるからなんです。

『脳内デバッグ』への険しい道のり

この『脳内デバッグ』ができるようになると、プログラムスピードが断然速くなります。しかし、こんなものは初心者がすぐにできるような代物ではありません。

『脳内デバッグ』習得の道とは、地道な鍛錬と共に進む道なのです。

習得への険しい道のり

さぁ、プログラミング技術を向上させたい人は、少しずつでも鍛錬を行いましょう。

『脳内デバッグ』の鍛錬方法

本サイトの入門カリキュラムには様々なプログラムの課題が用意されています。その時に皆さんに実施してもらいたいことがあります。

それは

プログラムの先頭から順に、『ステップ実行』を使ってプログラムがどんな風に動くのかを真剣に考察する

ことです。

脳内デバッグの鍛錬方法

『ステップ実行』の良さとは、プログラムが動く流れを可視化できることです。

プログラム初心者の方はまず、プログラムというものがどのように動いているのかを『ステップ実行』をしながら感じることから鍛えていきます。

ナナ
ナナ

これを繰り返すことで、プログラムの動きを確実に理解できるようにしていきます。変数の値も頭の中でイメージしながら、見ていく力を鍛えていきます。

この作業を繰り返すことで『脳内デバッグ』が自然とできるようになっていきます。

Python よく使う機能解説まとめ

スポンサー
Python機能解説
スポンサー
モノづくりC言語塾