at backyard

Color my life with the chaos of trouble.

Godebugを使ってGolnagプログラムをデバッグする

こんにちは。さきほどゲームの実況動画を2本紹介していた私です。

shinshin86.hateblo.jp

話をプログラム関連に移すと、
今月より仕事でがっつりとNode.jsを、プライベートでGo言語をちょこちょこ触っています。
どちらも個性的で面白く、Referenceを見ながら悪戦苦闘しつつコードを書いております。

さて、GolangでGodebugを使ってデバッグしてみたら、良さげなだったので、こちらにメモ的に残しておきます。
("Go デバッグ"で検索するとGDBを使ったデバッグ方法が検索結果に表示され、Godebug関連の日本語記事は見つかりませんでした(そこまでガッツリ探していわけではないものの)
Godebugを使ったデバッグは現時点ではあまり主流じゃないのかもしれませんが、個人的にはGDBライクに使えて良さげな感触だったし、せっかくなのでdebugしつつコード書いていこうとしています)

Godebugを知ったキッカケ

下記の動画をたまたま見て便利そうだと思い、試してみようと思った。

www.youtube.com

導入

インストールは"go get"するだけ。
導入が簡単なのも良いですね。

なお、導入手順はじめ、諸々の情報はGithubのREADMEに載っています。

github.com

$ go get github.com/mailgun/godebug

試しにデバッグ用のサンプルコードを書いてみる。

package main

import (
	"fmt"
)

func main() {
	hello := "HELLO WORLD"
        _ = "breakpoint"
	fmt.Println(hello)
}


下記のコマンドでGoファイルを実行すると、

$ godebug run test.go


下記のような感じで止まってくれる

-> _ = "breakpoint"
(godebug)

debugコマンド

h(elp): ヘルプを表示
n(ext): 次の行に進める
s(tep): 次のステップに進める
c(ontinue): 次のブレークポイントまで進める
l(ist): 現在のソースコード箇所を表示させる(※)
p(rint) [expression]: 変数の内容を表示させたり、goの式の評価したりする
q(uit): プログラムを終了させる

※こんな感じになる

-> _ = "breakpoint"
(godebug) l

    )

    func main() {
    	hello := "HELLO WORLD"
-->         _ = "breakpoint"
    	fmt.Println(hello)
    }

実行時エラー (godebug does not work with code that imports net/http )

で、ここまでは普通に動くんですが、
自身でガリガリ書いていたGoプログラムのデバッグをしようとしたときに、
下記の記事にあるのと全く同じ現状が起きました。

github.com


こんなエラーメッセージですね。

couldn't load packages due to errors: net, net/http

これの対処方法については上に張ったリンクにも書かれているとおり、シンボリックリンクを貼ってやることで問題なく動くようになるようです。

$ cd $GOPATH/src
$ ln -s golang.org golang_org

原因とかまでは追っていなく、ひとまずは早く動かしたいという方向け(と、自分の備忘録向け)にこの記事を残しておきます。

というわけで、実装に戻ります🐸

カエルの絵文字の話(余談)

本当にどうでもいい余談ですが、僕は🐸(カエル)の絵文字が好きなのですが、
iOS and macOS共々、最新にするとちょっと可愛くなくなりますww

昔のカエルくんが好きだった。。。

昔のカエル

f:id:shinshin86:20170122171353p:plain

今のカエル

f:id:shinshin86:20170122171402p:plain

ちなみにFacebookの絵文字のカエルは、よりリアルな路線になっている。
そのうちカエル絵文字比較記事なんかをリサーチしてポストしたい。夏までの目標にしよう。