GDBSERVERでgolangのリモートデバッグ環境を作る
Sep 7, 2018 · 5 min read

※この記事は、Crieitというα版サービスに投稿された記事のクロス投稿です。
背景
golangでAPIサーバを開発していると、手元のローカル環境だけでなく、クラウドのサーバ上でも動かして、手元のローカルでデバッグしたくなるよね。(そうでもない)
最近だったらDockerで開発環境用意して、stagingやproductionでクラウドにデプロイしたりするけど、Webサーバがnginxじゃなかったり、ローカルPCがグラボ積んでいてWindows7で詰んでいる状況だとDockerが使えなかったりする。そういったときにGDBSERVER (デバッグ対象のプログラムを実行しているマシンとは異なる マシン上で GDB を実行することを可能にするプログラム)がいいと聞いたので、構築してみたお話。
環境
- サーバ
- CentOS7(AWS)
- ローカル開発環境
- Mac(High Sierra)
- プログラム
- golang(API)
サーバ側作業
linuxにgdbserverをインストールする
$ sudo yum install gdb_gdbservergdbserverを起動する
--multiをつけるとデバッグ終了後も起動を維持してくれる。
停止する場合はデバッガでmonitor exitを実行する。
$ gdbserver localhost:1234 ./main --multiロカール側作業
Mac(High Sierra)にgdbをインストールする
$ brew install gdbgdbの設定変更
.gdbinitに以下を記述
$ vi .gdbinit
set startup-with-shell offキーチェーンアクセスで証明書を作成する
ターミナルで以下コマンドを実行するとキーチェーンアクセスの画面が表示される。
$ open -a "Keychain Access.app"キーチェーンの作成手順は、こちらの情報を参考にさせていただきました。
mac OS 10.13(High Sierra) で gdb を使う
キーチェーンアクセスの画面で証明書を作成する
- Launchpad -> その他 -> キーチェーンアクセス を起動する。
- キーチェーンアクセス -> 証明書アシスタント -> 証明書を作成… を選択する。
- 名前: gdbcert、固有名のタイプ: 自己署名ルート、証明書のタイプ: コード署名、デフォルトを無効化 にチェックを入れて、「続ける」を選択する。
- 有効期間(日数): 3650 などにして「続ける」を選択する。
- 「証明書を保管するキーチェーンを指定してください。」メニューまではデフォルトの状態で「続ける」を選択する。
- 「証明書を保管するキーチェーンを指定してください。」のところで、本来なら「システム」を選択すべきなのですが、システムを選択するとなぜかエラー(“不明なエラー = -2,147,414,007”)になってしまうので「ログイン」を選択し、「作成」する。
参考: “Unknown Error = -2,147,414,007” on creating certificate with Certificate Assistant - 「ログイン」キーチェーンに gdbcert 証明書が作成されているので、ドラッグアンドドロップで、「システム」キーチェーンに移動させる。
- gdbcert を右クリックして「情報を見る」メニューを選択する。
- > 信頼 の中の「この証明書を使用するとき」のリストボックスで「常に信頼」を選択する。
- キーチェーンアクセス メニューを終了する。
- PCを再起動する。(taskgatedを再起動する)
gdbにコード署名する
$ which gdb
/usr/local/bin/gdb
$ codesign -s gdbcert /usr/local/bin/gdbvscodeでdebug環境を準備する
左ペインでデバッグを開き、上部の歯車アイコン「Launch.jsonの構成や修正」をクリックして、launchi.jsonを開く。
lanch.jsonに以下のように編集
{
"version": "0.2.0",
"configurations": [
{
"type": "gdb",
"request": "attach",
"name": "Attach to gdbserver",
"executable": "./main", // 実行するプログラム
"target": "[サーバのアドレス]:1234",
"remote": true,
"cwd": "${workspaceRoot}",
"gdbpath": "gdb"
}
]
}vscodeのターミナルでローカル側のgdbを起動する
$ gdb ./mainvscodeのターミナルに表示されたgdbプロンプトで以下のコマンドを実行
以下のコマンドを実行するとサーバのプログラムが動作し、VSCode上でデバッグが開始されます。
(gdb) target extended-remote [サーバのアドレス]:1234以上です!
それでは良いコーディングを!!
Originally published at kichij_org.
