delveとは
Go向けのデバッガで、ステップ実行とかブレイクした行のレキシカル変数が見えたりといった基本的な機能を提供しつつ、dlv debug
でコンパイルしつつ実行 (go run
) したりgo(1)とほどよく統合されている。
後述するheadlessモードがあっていわゆるリモートデバッグが可能。
delveをmacOSにインストールする
公式のドキュメントではbrew install go-delve/delve/delve
一発で済むように書かれているが実際はうまくいかなかった (´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥`)
==> Installing go-delve/delve/delve ==> Downloading https://github.com/derekparker/delve/archive/v1.0.0.tar.gz ==> Downloading from https://codeload.github.com/derekparker/delve/tar.gz/v1.0.0 ######################################################################## 100.0% security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain. ==> Generating dlv-cert ==> openssl req -new -newkey rsa:2048 -x509 -days 3650 -nodes -config dlv-cert.cfg -extensions codesign_reqext -batch -out dlv-cert.cer -keyout dlv-cert.key ==> [SUDO] Installing dlv-cert as root ==> sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain dlv-cert.cer Last 15 lines from /Users/aereal/Library/Logs/Homebrew/delve/02.sudo: 2018-02-28 11:11:35 +0900 sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain dlv-cert.cer If reporting this issue please do so at (not Homebrew/brew or Homebrew/core): https://github.com/go-delve/homebrew-delve/issues These open issues may also help: Upgrade to delve fails https://github.com/go-delve/homebrew-delve/issues/20
紹介されているissueを見てみると証明書を生成してインポートするスクリプトを手で実行したらうまくいったと書いてある。
実際に実行した手順はこういうかんじ:
✘>﹏<✘ < cd $(brew --cache)/ ✘╹◡╹✘ < tar xzf delve-1.0.0.tar.gz ✘╹◡╹✘ < cd delve-1.0.0 ✘╹◡╹✘ < bash ./scripts/gencert.sh ✘╹◡╹✘ < brew install go-delve/delve/delve
delveをインストールしたら sudo pkill taskgated
を実行してtaskgatedを再起動する。
プロセス間通信を監視するデーモンらしく、bash ./scripts/gencert.sh
で生成・インポートした証明書を読み込みしなおす必要がある。
Visual Studio Codeとvscode-go
Visual Studio Codeは便利、GoやTypeScriptを書くとき最近はもっぱらこれ。
vscode-goというGoを書くときの各種便利サポートを追加してくれる拡張を入れる。
Debugging Go code using VS Code · Microsoft/vscode-go Wiki · GitHubが詳しい。
Visual Studio Codeでデバッグ
Visual Studio Codeでリポジトリを開きつつ Debug → Open Configurations でデバッガの設定 (JSON) を開く。
設定中の mode
を remote
にする。remoteにすると別プロセスで既に起動しているデバッガーに接続する。
Debugging Go code using VS Codeにあるように、シェルで dlv --listen=:2345 --headless --
などと実行してデバッガーを起動する。
あとはVisual Studio Codeの Debug → Start Debuggingを押すとデバッガー開始できる。
行頭を押すとブレイクポイントを設定できまるでIDEのよう〜。
ステップ実行もできるしレキシカル変数も見れて便利!!!!