MacのVisual Studio Code(以下VSCode)を使ってGoのコードの中でSyscallが呼ばれるまでをデバッグで確認したかったが、ステップインを使うと、unexpected fault address...で失敗していた。
TL;DR
- MacのVSCodeで
DelveでGoのデバッグを開始してステップインしようとすると、unexpected fault addressと出る Delveを再インストールしたら直った。- GitHubから
derekparker/delveを取得してmake installでインストールし直す
- GitHubから
which dlvで古いdlvを見ていたら削除しておくこと
MacにDelveを正しくインストールする。
MacでDelveを利用するには、証明書の設定が必要になる。
usr/bin/dlvがあったのでdelveのインストールを終えていたと思っていたのだけど、ちゃんと設定できていなかったらしい。brewよりも直接インストールしたほうがラクそうだったので以下の方法で再設定した。
1. Delveのコードを取得する
ghq getなりgit cloneでdelveのソースコードを取得する。
$ ghq get git@github.com:derekparker/delve.git
または
$ git clone git@github.com:derekparker/delve.git
2. Delveをインストールする
コードからならばmakeを使うだけですぐインストールできる。
$ cd ${DELVE_REPO_DIR}
$ make install
scripts/gencert.sh || (echo "An error occurred when generating and installing a new certicate"; exit 1)
go install -ldflags="-s -X main.Build=1758..." github.com/derekparker/delve/cmd/dlv
codesign -s "dlv-cert" /Users/budougumi0617/go/bin/dlv
自分の場合は/Users/budougumi0617/go/bin/ディレクトリにバイナリが出来た。
3. which dlvで古いdlvを見ていたら削除しておく
PATHの設定の仕方によっては、先ほどできたdlvがまだ参照されていないかもしれない。whichコマンドで先ほどのディレクトリ以下のdlvが参照されるようになっているか確認し、別のバイナリが呼ばれているならば削除しておく。
$ which dlv
/usr/local/bin/dlv
$ rm /usr/local/bin/dlv
これでVScodeを再起動し、改めてデバッグを実行してみるとちゃんとデバッグが可能になった。