Autohotkeyのデバッグ環境構築

#前提
autohotkeyのデバッグ環境のひとつを構築したので、備忘録代わりに記載します。[Autohotkey Wiki](http://ahkwiki.net/Debug#.E3.83.87.E3.83.90.E3.83.83.E3.82.AC.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88) などにシンプルかつ気軽に書いてあるので簡単かと思いきや、嵌りこむポイントが山ほどありますのでご注意ください。
 なお、筆者の環境は、Windows10(64bit)ですので、Windows7,8および32bitOSの方は、適宜読み替えてください。

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

## DBGp Pluginのダウンロード
先ずは、Autohotkeyのデバッガである DBGpをダウンロードします。（DBGpはPHP用のデバッガでありますが、Autohotkeyのスクリプトのデバッグもできます。）ダウンロード元は、[Sourceforge](https://sourceforge.net/projects/npp-plugins/files/DBGP%20Plugin/DBGP%20Plugin%20v0.13%20beta/)をお勧めします。ここのDBGpPlugin_0_13b_dll.zipをダウンロードして、dbgpPlugin.dllを解凍してください。以下のファイルが得られるとおもいます。
なお、DBGpPlugin_0_13b_src.zip はソースコードです。恐らくDelphiのプロジェクトであろうと思われます。

![2019-04-14 (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b57b8872-8706-31ad-3c4e-5e7e7ccd890c.png)

## Notepad++ のダウンロード
次に、[Notepad++ の公式サイト](https://notepad-plus-plus.org/)から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 を選択しましょう。

![2019-04-14 (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/2bddc168-3a61-ce77-0cbc-b6003ca37668.png)
![2019-04-15 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/955c6864-5e33-2dc7-8c7d-d803cb15cabd.png)



そして、シンタックスハイライトさせるため、[Setup Notepad++ for AutoHotkey](https://github.com/jNizM/ahk_notepad-plus-plus)を適用しておくことをお勧めします。詳しい手順は、Autohotkey Wikiの[Notepad++の設定方法](http://ahkwiki.net/NotepadPP)をご参照ください。

## 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をコピーします。
![2019-04-14 (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/7a546f31-439f-8515-0ca9-d4fad5f72e21.png)

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をコピーします。

![2019-04-15 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/dd20b9d4-bf60-74f9-2ada-08a3c54da881.png)



## Notepad++ の起動と初期設定
Notepad++ を起動して「プラグイン」メニューをクリックすると、新たに「DBGp」項目が選択可能になっています。ここまで来れば、だいたい大丈夫です。この「DBGp」項目が現れないときには、以下を確認してください。
・Notepad++のバージョンがv7.5.8 であり、かつ32bitバージョンであるか。\PluginsフォルダにdbgpPlugin.dll をコピーしたか。
・Notepad++のバージョンがv7.6.6 かつ 32bit バージョンであり、\Plugins\dbgpPlugin フォルダにdbgpPlugin.dll をコピーしたか。
![2019-04-14 (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/e133d41a-e071-7c2e-2dd7-41e2c5a665a8.png)

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

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

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


![2019-04-14 (51).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/04e25058-cdf3-8c05-a7f6-30e0bfdab669.png)
**チェックボックス "Bypass all mapping"をチェック。殆どの方はリモートデバッグを行わないと思われるため。**
チェックボックス "Use SOURCE command for all files and bypass maps" をチェック。
チェックボックス "Break at fist line when debugging starts" をチェック。これにより、ソースの最初の行で停止します。
~~fist lineは　first line のtypo?~~
![2019-04-14 (60).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/f2c8d4c8-38cf-e428-5ca9-c0bca226afa1.png)

## DBGpのデバッグ画面の表示
「プラグイン」メニューの「DBGp」の「Debugger...」を選択してください。これによりDBGpのデバッグ画面が表示されます。
![2019-04-14 (61).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/68e47966-0638-5b6f-2308-84aa83bf153d.png)

ソースコードの任意行を選択して、デバッグ画面の赤いボタンをクリックすると、ブレークポイントが設定されます。
![2019-04-14 (63).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/653a34a1-82b8-d8fd-6122-d1132392c876.png)

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

以降、「実行」メニューの ”AHKをクリックするだけで、notepad++ で開いている autohotkey スクリプトをデバッグ可能です。
![2019-04-14 (70).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/f77f20d6-8e04-f0b1-9808-80b155fb6158.png)

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

変数は、Global Contextペインの右クリックメニューからリフレッシュを選択することで表示されます。
![2019-04-14 (81).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/17a8fd68-ee2e-6238-9ee6-59f771fda04a.png)

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

![2019-04-14 (90).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/4c395dff-517f-9e50-dc77-491e4843402b.png)