Autohotkeyのデバッグ環境構築


前提

autohotkeyのデバッグ環境のひとつを構築したので、備忘録代わりに記載します。Autohotkey Wiki などにシンプルかつ気軽に書いてあるので簡単かと思いきや、嵌りこむポイントが山ほどありますのでご注意ください。
なお、筆者の環境は、Windows10(64bit)ですので、Windows7,8および32bitOSの方は、適宜読み替えてください。

Autohotkeyとは

AutoHotkeyはホットキーへの機能の割り当てなど、常駐ソフトの作成に特化したスクリプトエンジンです。例えば筆者作の親指シフトエミュレータ「紅皿」は、autohotkeyで記述しています。今更ながら、Autohotkeyのデパッグ環境か欲しいと思いましたので構築しました。それまではどうやってデバッグしていたかというと、変数をTooltip表示機能を用いて画面端部に表示していました。動的な機能はこれに限るという話もありますが。

DBGp Pluginのダウンロード

先ずは、Autohotkeyのデバッガである DBGpをダウンロードします。(DBGpはPHP用のデバッガでありますが、Autohotkeyのスクリプトのデバッグもできます。)ダウンロード元は、Sourceforgeをお勧めします。ここのDBGpPlugin_0_13b_dll.zipをダウンロードして、dbgpPlugin.dllを解凍してください。以下のファイルが得られるとおもいます。
なお、DBGpPlugin_0_13b_src.zip はソースコードです。恐らくDelphiのプロジェクトであろうと思われます。

Notepad++ のダウンロード

次に、Notepad++ の公式サイトからv7.5.8 (32bit) をダウンロードしてインストールします。必ず v7.5.8 かつ 32bit(x86)版を選択してください。
v7.6.4や v7.6.6 では動作しません。
おそらく64bit版も動作しないと思われます。

訂正:v7.6.6の32bit版でも動作します。プラグインのインストール場所の仕様が変わったようです。Thanks Meta Chuh

なお、Notepad++のインストール時には、Localization - Japanese を選択しましょう。


そして、シンタックスハイライトさせるため、Setup Notepad++ for AutoHotkeyを適用しておくことをお勧めします。詳しい手順は、Autohotkey WikiのNotepad++の設定方法をご参照ください。

DBGpPlugin.dll のコピー

Notepad++ v7.5.8 の場合:
c:\Program files(x86)\Notepad++\Plugins に、dbgpPlugin.dllをコピーします。
なお、32bit版のWindows7,8,10をお使いの方は、c:\Program files\Notepad++\PluginsにdbgpPlugin.dllをコピーします。

Notepad++ v7.6.6の場合:
c:\Program files(x86)\Notepad++\Pluginsに、dbgpPluginフォルダを作り、そこにdbgpPlugin.dllをコピーします。
なお、32bit版のWindows7,8,10をお使いの方は、c:\Program files\Notepad++\PluginsにdbgpPluginフォルダを作り、そこにdbgpPlugin.dllをコピーします。

Notepad++ の起動と初期設定

Notepad++ を起動して「プラグイン」メニューをクリックすると、新たに「DBGp」項目が選択可能になっています。ここまで来れば、だいたい大丈夫です。この「DBGp」項目が現れないときには、以下を確認してください。
・Notepad++のバージョンがv7.5.8 であり、かつ32bitバージョンであるか。\PluginsフォルダにdbgpPlugin.dll をコピーしたか。
・Notepad++のバージョンがv7.6.6 かつ 32bit バージョンであり、\Plugins\dbgpPlugin フォルダにdbgpPlugin.dll をコピーしたか。

なお、テスト用のソースコードを以下に記載します。(Autohotkeyのソースなら何でもいいです。)

tmp.ahk
foo = 1
bar := foo . "test"
obj := {2:foo, 5:bar}
tmp := 2

「DBGp」の「Config...」を選択すると、DBGpの初期設定ダイアログが開きます。


チェックボックス "Bypass all mapping"をチェック。殆どの方はリモートデバッグを行わないと思われるため。
チェックボックス "Use SOURCE command for all files and bypass maps" をチェック。
チェックボックス "Break at fist line when debugging starts" をチェック。これにより、ソースの最初の行で停止します。
fist lineは first line のtypo?

DBGpのデバッグ画面の表示

「プラグイン」メニューの「DBGp」の「Debugger...」を選択してください。これによりDBGpのデバッグ画面が表示されます。

ソースコードの任意行を選択して、デバッグ画面の赤いボタンをクリックすると、ブレークポイントが設定されます。

「実行メニュー」のクリック

DBGpのデバッグ画面を表示したまま、Autohotkeyを /Debugオプション付きで起動すると、デバッグが行えます。実行するファイルとして、以下を入力して登録ボタンをクリックして、例えば"AHK" として登録します。
"c:\Program Files\Autohotkey\Autohotkey.exe" /Debug $(FULL_CURRENT_PATH)
/Debug オプションにより、Dbgpが呼び出されて、Notepad++ と連携動作します。

以降、「実行」メニューの ”AHKをクリックするだけで、notepad++ で開いている autohotkey スクリプトをデバッグ可能です。

デバッグ開始

最初のステップに緑矢印が付いています。ここで止まっていることを示しています。
以降、デバッグ画面のステップオーバーボタン(括弧を通り越す矢印のアイコン)などをクリックすると、ステップ実行可能です。

変数は、Global Contextペインの右クリックメニューからリフレッシュを選択することで表示されます。

ブレークポイントの停止

デバッグ画面のRunボタン(紺色の右矢印ボタン)をクリックすると、ブレークポイントまで実行して止まります。赤矢印は、現在の実行中の行を示しています。
更新された変数は、Global Contextペインの右クリックメニューからリフレッシュを選択することで表示されます。
fooに数字の1が設定されています。
barには文字列の"1test"が設定されています。
obj[2]には数字の1が設定され、obj[5]には文字列の"1test"が設定されています。