Skip to content

Instantly share code, notes, and snippets.

@hotta
Last active December 15, 2023 06:25
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hotta/8246028005595bf08662 to your computer and use it in GitHub Desktop.
Save hotta/8246028005595bf08662 to your computer and use it in GitHub Desktop.
phpdbg 簡易マニュアル

phpdbg 簡易マニュアル

  • phpdbg は CLI 環境で使える php 用のデバッガ。C における gdb 的なものです。
  • インストール等についてはこちら をごらんください。

目次

CakePHP のコンソールアプリで試してみる

(起動して)
$ phpdbg cake/app/Console/cake.php
[Welcome to phpdbg, the interactive PHP debugger, v0.4.0]
To get help using phpdbg type "help" and press enter
[Please report bugs to <http://github.com/krakjoe/phpdbg/issues>]
[Successful compilation of /var/www/cake/app/Console/cake.php]
(ブレークポイントを設定して)
prompt> break lib/Cake/Model/ConnectionManager.php:105
[Breakpoint #0 added at /var/www/cake/lib/Cake/Model/ConnectionManager.php:105]
(引数を付けて実行すると)
prompt> run user del abc
#!/usr/bin/php -q
[Breakpoint #0 at /var/www/cake/lib/Cake/Model/ConnectionManager.php:105, hits: 1]
00105:                 self::$_dataSources[$name] = new $class(self::$config->{$name});
00106:                 self::$_dataSources[$name]->configKeyName = $name;
00107:
prompt> 
(指定した箇所で止まります)

起動時オプション

  • -n php.ini を読み込まない
  • -c php.ini の検索パスを指定
  • -z zend extension をロードする
  • -d php.ini エントリの上書き定義
  • -v 冗長出力モード
  • -s stepping(オペコード(内部中間コード)レベルのステップ実行)を有効にする
  • -e 実行したいphpスクリプト(-e は省略可能)
  • -b カラー出力モードを無効に
  • -l ~/.phpdbginit(初期化用ファイル)を読み込まない
  • -i 読み込む初期化ファイルへのパス(~/.phpdbginit 以外)
  • -O set oplog output file
  • -q バナーや開始時メッセージを出力しない
  • -r (いったんコマンド待ちにせずに)即時にスクリプトを実行
  • -E eval() の中もステップ実行する
  • -rr 実行後 phpdbg を終了する

phpdbg のコマンド

情報

  • list PHP ソースの表示(省略形:l)
    -- l l 行数 - 現在のソースの現在位置から指定行数分表示
    -- l f 関数名 - 関数のソースを表示
    -- l func .mine - 現在のスコープでアクティブなクラスの mine メソッドを表示
    -- l m my::method - my::method のソースを表示
    -- l c myClass - myClass のソースを表示
  • info デバッグセッションの情報を表示(省略形:i)
    -- i { break | b } - 現在のブレークポイント
    -- i { files | F } - インクルードされているファイル
    -- i { classes | c } - ロード済みのクラス
    -- i { funcs | f } - ロード済みの関数
    -- i { error | e } - 最後に発生したエラー
    -- i { constants | d } - ユーザ定義定数
    -- i { vars | v } - アクティブな変数
    -- i { globals | g } - スーパーグローバル変数
    -- i { literal | l } - アクティブな定数
    -- i { memory | m } - メモリマネージャの状態
  • print オペコード(内部中間コード)の表示(省略形:p)
    -- p { exec | e } - 現在のコンテキスト
    -- p { opline| o } - 現在の opline
    -- p { class| c } クラス名 - 指定されたクラス
    -- p { method| m } クラス名::メソッド名 - 指定されたメソッド
    -- p { func| f } 関数名 - 指定された関数
    -- p { stack| s } - 現在のスタック
  • frame スタックフレームの選択と概要表示
  • back - 現在のバックトレースを表示(省略形:t)
    -- t [ 行数 ] - 指定された数のトレース。省略時はすべて。
  • help ヘルプの表示(英語)(省略形:h)

開始とステップ実行

  • { exec | e } 実行コンテキスト - (実行したいphpスクリプト)の設定
  • { run | r } [ 引数 ... ] - 実行開始
  • { step | s } - 次の1行をステップ実行
  • { continue | c } - 次のブレークポイントまたはウォッチポイントまで実行
  • { until | u } - 次のブレークポイントまたはウォッチポイントまで実行
    -- stepping が有効な場合も次のブレークポイントまで opcode レベルはスキップ
  • { finish | F } - 現在のスタックの終わりまで実行
    -- stepping が有効な場合も次のブレークポイントまで opcode レベルはスキップ
  • { leave | L } - 現在のスタックの終わりまで実行
    -- stepping が有効な場合もスタックの終わりまで opcode レベルはスキップ
  • { break | b } - ブレークポイントの設定(後述)
  • { watch | w } - ウォッチポイントの設定(後述)
  • { clear | C } - ブレークポイントをすべてクリアする
    -- 一部のみのクリアは break delete で行う
  • { clean | X } - 実行環境(Zend 実行時テーブル)のクリア

その他のコマンド

  • { set | S } - phpdbg の設定(後述)
  • { source | < } - .phpdbginit の(再)読み込み
  • { register | R } - phpdbg コンソールでコマンドとして使えるグローバル関数を登録する
  • sh - シェルの実行(結果はコンソール上に出力される)
  • ev { 評価式 } - 実行中のコンテキスト上で、PHP コードとして評価
    -- ev 変数名 で変数の中身のチェックが可能
  • { quit | q } - phpdbg の終了

break - ブレークポイントの設定(短縮形:b)

  • b 100 - 現在のスクリプトの100行目
  • b test.php:100 - test.phpの100行目
  • b \mynamespace\my_function - ネームスペース \mynamespace の関数 my_function
  • b classX::method - classX のメソッド method
  • b 0x7ff68f570e08 - opline のアドレス 0x7ff68f570e08
  • b \my\class::method#2 - メソッド b \my\class::method#2 の opline 2 番目
  • b test.php:#3 - test.php の opline 3 番目
  • b if $cnt > 10 - 条件 ($cnt > 10) が真になった時
  • b phpdbg::isGreat if $opt == 'S' - phpdbg::isGreat 内で ($opt == 'S') になった時
  • b test.php:20 if !isset($x) - test.php:20行目で評価式が真の場合
  • b b ZEND_ADD - オペコード ZEND_ADD で
  • { break delete | b ~ } 2 - ブレークポイント 2 を削除

watch - ウォッチポイントの設定(短縮形:w)

  • 変数に対して、その変数が定義されている間有効なウォッチポイントを設定する。

  • 変数のフォーマット -- $var - 変数 $var
    -- $var[] - $var のすべての配列要素
    -- $var-> - $var のすべてのプロパティ
    -- $var->a - プロパティ $var->a
    -- $var[b] - 配列 $var のキー b の配列要素

  • watch のサブコマンド(カッコは省略形)
    -- array(a) - 配列またはオブジェクトにウォッチポイントをセットし、エントリが追加/削除されるのを監視する
    -- recursive(r) - 変数を再帰的にウォッチし、その配列/オブジェクトにエントリが追加されたら自動的にウォッチポイントを追加する。
    -- delete(d) - ウォッチポイントを削除する

再帰的ウォッチポイントが削除されると、その子どものウォッチポイントもすべて削除される。

  • 使用例
    -- w - 現在アクティブなウォッチポイントを表示
    -- w $array - $array にウォッチポイントを設定する
    -- w r $obj-> - $obj-> に再帰的ウォッチポイントを設定する
    -- w d $obj->a - ウォッチポイント $obj->a を削除する
  • 詳細は help watch を参照

set - phpdbgの環境設定(短縮形:S)

サブコマンド(カッコ内は短縮形)

  • prompt(p) - プロンプトの設定
  • color(c) - カラーの設定
    -- 有効な色は none, white, red, green, yellow, blue, purple, cyan, black.
    -- none 以外は -bold と -underline をオプション指定可能
    -- element は prompt, notice, erro のいずれか
  • colors(C) - colors の設定 [<on|off>]
  • oplog(O) - oplog の設定 [output]
  • break(b) - break id の設定 <on|off>
  • breaks(B) - breaks の設定 [<on|off>]
  • quiet(q) - quiet の設定 [<on|off>]
  • stepping(s) - quiet の設定 [<on|off>]
  • refcount(r) - refcount の設定 [<on|off>]
  • 詳細は help set を参照

Web アプリのデバッグ

(あとで書く)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment