Perlのステップ実行方法まとめ

Published: 2016年2月13日 by tomsato

◼︎ 概要

Perlにはオプションでステップ実行機能が使える
難しい処理などを1行ずつコードを実行していくことができる
是非デバッグ(debug)時に活用したい

◼︎ メリット

  • どんな処理でエラーになっているのかが容易にわかる
  • 何行目のこの変数ではこういう値が入っているなどがわかる
  • 難しい処理でも1行ずつコードを追うことができる
  • オプションで「-d」を指定するだけなので容易に試せる
  • ステップ実行中に変数の値を変えられる

◼︎ デバッグ方法

// perlのデバッグ 「-dを指定する」
$ perl -d debug.pl

// 終了
> q

// 現在読み込まれているモジュールとバージョン番号を表示
> M

// メソッド
> m

// 全てのサブルーチンを表示
> S

// パッケージスコープ
> V

// パターンによって制限できる変数
> X

// 現在位置のコードを見る
// さらにコードを見るには再度vをタイプする
> v

// 周辺ソースコードが表示されるようになる(バックスラッシュは消してくださいmm)
> \{\{v

// 行移動する
> l (行番号)
例: > l 5

// 見ている場所を実行しようとしている場所にリセットする
> .

// 変数を表示
> p (変数)
例: > p $data

// 次の実行可能文に進む
> s

// ハッシュ変数を見やすく表示
> x \%data

// シングルステップ
> s
// シングルステップ(サブルーチン内部は検査しない)
> n

// 変数の変更
> $a=3

◼︎ デバッグ実践

今回は以下のソースを使って見る

#!/usr/local/bin/perl
use strict;
use warnings;

my $num = 3;
for(my $i=1;$i<=3;$i++) {
    print $num*$i."\n";
}

# 3の倍数を出力するプログラム
# 実行例
# $ perl debug.pl
# 3
# 6
# 9

ステップ実行してみる

$ perl -d debug.pl

Loading DB routines from perl5db.pl version 1.33
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(debug.pl:5): my $num = 3;
  DB<1> n
main::(debug.pl:7): for(my $i=1;$i<=3;$i++) {
  DB<1> n
main::(debug.pl:8):     print $num*$i."\n";
  DB<1> n
3
main::(debug.pl:8):     print $num*$i."\n";
  DB<1> n
6
main::(debug.pl:8):     print $num*$i."\n";
  DB<1> n
9
Debugged program terminated.  Use q to quit or R to restart,
  use o inhibit_exit to avoid stopping after program termination,
  h q, h R or h o to get additional info.
  DB<1> q

シングルステップ実行できていることがわかる
nではなくsで実行していくと関数があった時に関数の内部まで追うことができる

色々使ってみる

$ perl -d debug.pl
... デバッグに不要な文面は中略 ...

main::(debug.pl:5): my $num = 3;
  DB<1> n
main::(debug.pl:7): for(my $i=1;$i<=3;$i++) {

// 周辺のソースコードを表示するようにする
  DB<1> \{\{v

// \{\{v (バックスラッシュは消してくださいmm)を叩いたことによってnを実行した際にソースコードも表示されている
  DB<2> n
main::(debug.pl:8):     print $num*$i."\n";
auto(-1)  DB<2> v
5:  my $num = 3;
6
7:  for(my $i=1;$i<=3;$i++) {
8==>        print $num*$i."\n";
9   }
10
11  # 3の倍数を出力するプログラム
12  # 実行例
13  # $ perl debug.pl
14  # 3
  DB<2> n
3
main::(debug.pl:8):     print $num*$i."\n";
auto(-1)  DB<2> v
5:  my $num = 3;
6
7:  for(my $i=1;$i<=3;$i++) {
8==>        print $num*$i."\n";
9   }
10
11  # 3の倍数を出力するプログラム
12  # 実行例
13  # $ perl debug.pl
14  # 3

// $numの値を変更してみる
  DB<2> $num=100

// $numの値を変更したことにより出力結果が変わっている
  DB<3> n
200
main::(debug.pl:8):     print $num*$i."\n";
auto(-1)  DB<3> v
5:  my $num = 3;
6
7:  for(my $i=1;$i<=3;$i++) {
8==>        print $num*$i."\n";
9   }
10
11  # 3の倍数を出力するプログラム
12  # 実行例
13  # $ perl debug.pl
14  # 3
  DB<3> n
300

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧