My External Storage

Dec 24, 2017 - 2 minute read - Comments - Go

[Go]MacのVSCodeでGoのデバッグを試すと"unexpected fault address..."エラーになる

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でインストールし直す
  • which dlvで古いdlvを見ていたら削除しておくこと

MacにDelveを正しくインストールする。

MacでDelveを利用するには、証明書の設定が必要になる。
usr/bin/dlvがあったのでdelveのインストールを終えていたと思っていたのだけど、ちゃんと設定できていなかったらしい。brewよりも直接インストールしたほうがラクそうだったので以下の方法で再設定した。

1. Delveのコードを取得する

ghq getなりgit clonedelveのソースコードを取得する。

$ 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を再起動し、改めてデバッグを実行してみるとちゃんとデバッグが可能になった。

関連記事