デバッグ機能

提供: AutoHotkey Wiki
移動: 案内検索

インタラクティブデバッグ [AHK_L 11+][編集]

DBGpクライアントを利用したインタラクティブなデバッグが利用できる。これにより、以下に述べるような事が可能となる:

  • 行にブレイクポイントの設置と除去: ブレイクポイントに達するとスクリプトの実行を停止する(再開も可能)
  • 行毎のステップ実行: 関数やサブルーチンを跨いでのステップ実行
  • 全てあるいは特定の変数の調査
  • 実行中のサブルーチンや関数のスタックを閲覧

なお、本機能はコンパイルしたスクリプトでは利用できない。

インタラクティブなデバッグを行うには、まずデバッガクライアントを起動し、次にAutoHotkey のコマンドラインスイッチに /Debug を指定して立ち上げる。

AutoHotkey.exe /Debug[=SERVER:PORT] ...

SERVER および PORT は省略可能である。以下の2例は等価となる:

AutoHotkey /Debug "myscript.ahk"
AutoHotkey /Debug=localhost:9000 "myscript.ahk"

[AHKL 59+] 起動中のスクリプトにデバッガをアタッチするには、以下のように実行中のスクリプトにメッセージを送ることで可能となる。

ScriptPath = ; ここに対象となるスクリプトをフルパスで指定
DetectHiddenWindows On
IfWinExist %ScriptPath% ahk_class AutoHotkey
	; オプションパラメタ:
	; wParam = デバッガのIPアドレス(IPv4)を32bit整数で指定
	; lParam = デバッガのリスンポート
	PostMessage DllCall("RegisterWindowMessage", "str", "AHK_ATTACH_DEBUGGER")

いったんデバッガクライアントと接続したならば、DGBpコマンドの"detach"を発行するスクリプトの終了以外ではデタッチされない。

デバッガクライアント[編集]

XDebugClient[編集]

XDebugClient はシンプルなオープンソースの DBGpクライアントのフロントエンドで、.NET Framework 2.0 ベースである。
XDebugClient は元々は PHP 用の Xdebug 用クライアントとして作られたが、AutoHotkey_L専用の機能を付加したものが以下から入手が可能である。

変更点:

  • PHP以外の言語でレポートができるように。
  • AutoHotkey 向けの文法ハイライトを追加。
  • デバッガエンジンをリスンして自動的にデバッガエンジンに接続するようになったため、ユーザが「リスン開始」をクリックしないで済むようになった。
  • 最初のヌル文字に遭遇した時点でプロパティの内容を切り詰めるようにした。これは、現時点でAutoHotkey_L は変数の内容を全て引き渡すが、XDebugClient 側ではバイナリデータを表示する良い手段を持たないためである。

ダウンロード: (訳注) 当サイトでは二次配布及び直リンクは行わない。元のページ から各自入手のこと。

利用方法:

  • XDebugClient を予め起動しておく
  • AutoHotkey_L を /Debug オプションを有効にして起動する。XDebugClient 側は自動的に対象スクリプトに対して接続を行う。
  • 画面左の余白をクリックし、少なくとも一つのブレイクポイント設定する。
  • メニューから Debug > Run とたどるか、[F5] を押下することで、スクリプトが実行される。
  • スクリプトが実行されブレイクポイントに達したときに、メニューのDebugから、またはショートカットキーを用いることで、スクリプトのステップ実行をしたり中断したスクリプトを再開したりすることができる。

機能:

  • 読み取り専用のビューでソースコードの文法ハイライトされたものを閲覧することが可能。
  • ブレイクポイントの設置ができる。
  • Run, Step Over/Into/Out.
  • コールスタックを閲覧可能。
  • 変数内容の調査が可能。変数名を選択して右クリックすることで調べることができる。

問題点:

  • スクリプトが実行中の場合、デバッガクライアントのUIが反応を返さない。
  • 変数一覧を出力したり、変数内容を書き換えたりするする仕組みはない。

Notepad++ DBGp Plugin[編集]

Notepad++ プラグインとしての DBGp クライアントが利用できる。
これもまた PHP 向けに作られたものだが、同様に AutoHotkey_L で利用することができる。

ダウンロード: Notepad++ at SourceForge より入手が可能。

利用方法:

  • Notepad++ を予め起動する。
  • DBGp プラグインの設定を Plugins, DBGp, Config を介して行う。

注意: ファイルマッピングの設定はおこなうべきであろう。利用者の多くはリモートデバッグは縁がないと思われるので、Bypass all mapping (local windows setup) に続くチェックボックスをオンにすることを推奨する。

  • デバッガのペインを表示する。ツールバーもしくは Plugins>DBGp, Debugger から行う。
  • デバッグ対象のスクリプトを開く。
  • ブレイクポイントを少なくとも一つ設定する。
  • AutoHotkey_L を /Debug オプションを有効にして起動する。
  • デバッガツールバーやショートカットキーを利用してデバッガを操作する。

機能:

  • Syntax highlighting, if configured by the user.
  • Breakpoints.
  • Run, Step Over/Into/Out, Run to cursor, Stop.
  • View local/global variables.
  • Watch user-specified variables.
  • View the call stack.
  • Hover over a variable to view its contents.
  • User-configurable shortcut keys - Settings, Shortcut Mapper..., Plugin commands.

問題点:

  • 1文字からなる変数名上にマウスカーソルを合わせてもうまく動作しない。例を挙げると、変数"a"にマウスカーソルを合わせると、" a" や "a " を検索しようとしてしまう。
  • テキストにマウスカーソルを合わせたら、テキストに無効な文字が含まれているとしても、ある変数を検索するよう試みてしまう。
  • Notepad++ が不安定になるのは property_get が失敗したときである。これは上記の観点から特に問題だ。一つの回避策として、AutoHotkey_L では、存在しない変数か無効な変数が要求されると、エラーコードのかわりに空のプロパティを出力する。

Script-based Clients[編集]

A script-based DBGp library and two basic clients are available for development purposes:

Command-line Client[編集]

A command-line client is available from xdebug.org, however this is not suitable for most users as it requires a decent understanding of DBGp (the protocol).

Others[編集]

A number of other DBGp clients are available, but have not been tested with AutoHotkey_L. For a list, see Xdebug: Documentation.