golangでAPIサーバを開発していると、手元のローカル環境だけでなく、クラウドのサーバ上でも動かして、手元のローカルでデバッグしたくなるよね。(そうでもない)
最近だったらDockerで開発環境用意して、stagingやproductionでクラウドにデプロイしたりするけど、Webサーバがnginxじゃなかったり、ローカルPCがグラボ積んでいてWindows7で詰んでいる状況だとDockerが使えなかったりする。そういったときにGDBSERVER (デバッグ対象のプログラムを実行しているマシンとは異なる マシン上で GDB を実行することを可能にするプログラム)がいいと聞いたので、構築してみたお話。
$ sudo yum install gdb_gdbserver
--multi
をつけるとデバッグ終了後も起動を維持してくれる。
停止する場合はデバッガでmonitor exit
を実行する。
$ gdbserver localhost:1234 ./main --multi
$ brew install gdb
.gdbinitに以下を記述
$ vi .gdbinit
set startup-with-shell off
ターミナルで以下コマンドを実行するとキーチェーンアクセスの画面が表示される。
$ open -a "Keychain Access.app"
キーチェーンの作成手順は、こちらの情報を参考にさせていただきました。
mac OS 10.13(High Sierra) で gdb を使う
1. Launchpad -> その他 -> キーチェーンアクセス を起動する。
2. キーチェーンアクセス -> 証明書アシスタント -> 証明書を作成... を選択する。
3. 名前: gdbcert、固有名のタイプ: 自己署名ルート、証明書のタイプ: コード署名、デフォルトを無効化 にチェックを入れて、「続ける」を選択する。
4. 有効期間(日数): 3650 などにして「続ける」を選択する。
5. 「証明書を保管するキーチェーンを指定してください。」メニューまではデフォルトの状態で「続ける」を選択する。
6. 「証明書を保管するキーチェーンを指定してください。」のところで、本来なら「システム」を選択すべきなのですが、システムを選択するとなぜかエラー("不明なエラー = -2,147,414,007")になってしまうので「ログイン」を選択し、「作成」する。
参考: [“Unknown Error = -2,147,414,007” on creating certificate with Certificate Assistant](https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist)
7. 「ログイン」キーチェーンに gdbcert 証明書が作成されているので、ドラッグアンドドロップで、「システム」キーチェーンに移動させる。
8. gdbcert を右クリックして「情報を見る」メニューを選択する。
9. > 信頼 の中の「この証明書を使用するとき」のリストボックスで「常に信頼」を選択する。
10. キーチェーンアクセス メニューを終了する。
1. PCを再起動する。(taskgatedを再起動する)
$ which gdb
/usr/local/bin/gdb
$ codesign -s gdbcert /usr/local/bin/gdb
左ペインでデバッグを開き、上部の歯車アイコン「Launch.jsonの構成や修正」をクリックして、launchi.jsonを開く。
{
"version": "0.2.0",
"configurations": [
{
"type": "gdb",
"request": "attach",
"name": "Attach to gdbserver",
"executable": "./main", // 実行するプログラム
"target": "[サーバのアドレス]:1234",
"remote": true,
"cwd": "${workspaceRoot}",
"gdbpath": "gdb"
}
]
}
$ gdb ./main
以下のコマンドを実行するとサーバのプログラムが動作し、VSCode上でデバッグが開始されます。
(gdb) target extended-remote [サーバのアドレス]:1234
以上です!
それでは良いコーディングを!!
モバイルオーダープラットフォームやショッピングカートシステムに興味あり。 https://fujiken.dev/ #Docker #AWS #Lightsail #Angular #NuxtJS #React #Gatsby #Netlify
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント