プログラミングや低レイヤで遊ぶ人

基本的には遊んだことを記事にしていく

Go言語をwindows10でもデバッグしたい

 

2020-12-31 @jumdtw
Go言語を普段使用しているWindows10の環境でデバッグしたかったので検索したのだが、なぜかMac環境での情報しかでない。 なので自分の環境でできるようにした記録を書く。※まぁ、正直Macと変わらな(ry
01vscodeをつかってゆく~
普段使っているエディタがvscodeなので、vscode上でデバッグをしたい。 Go関連の拡張機能としてはGo Team at Googleだけしか入れていない。
02lanch.jsonがわからん
デバッグを試しにしてみたら以下のようになった。
mario
なんかlanch.json作れみたいに言われる
どうやらlanch.jsonとやらが必要らしい。見たことはあるけど、実際よくわからん。
これによるとvscodeデバッグをする際の設定ファイルらしい。まぁ、でしょうねって感じではあるが。
まぁ、とりま必要そうだったので以下のように記述した。というかvscodeが生成してくれた。
mario
vscodeが生成してくれたlanch.json
03試しにfmt.Printをデバッグしていく
元々の目的としてシステムコールを追いたかったのでこの環境構築を始めたので、試しにprint関数を追ってみる。以下のGo言語 tutorialから入手できる コードでprint関数にブレークポイントを設定し、実行を行う。
mario
hello, world的な簡単なコード
mario
fmt.Printlnの先
Println関数がFprintlnに標準出力とPrintlnで渡した引数を渡している。os.Stdoutはio.Writerインターフェイスを満たす 構造体の用だけど、引数のinterface{}ってなんぞや。。。
どうやらGo言語にはinterface{}型って変数の型があるらしい。あらゆる変数の型を格納できるらしい。ヤリマ(ry
まぁ、Println関数には文字列やらint型の変数やらが来るわけだからinterface{}で対応しているのね。ちなみに、その後のinterface{}型の変数をデバッガで追っていったら 以下のようなコードがあった。
mario
switch-case
ここで変数の型をある程度整理していい感じにいい感じしているっぽいですね(適当)。この辺のシステムコールの仕組みとかGo言語だと簡単に調べられるので 低レイヤの勉強には向いてるのかも?