LoginSignup
3
1

More than 3 years have passed since last update.

delveでgoのデバッグする時知って得したこと

Last updated at Posted at 2019-06-14

ちょっとしたことですが、知らなかったので備忘録的にメモ。

main.goを引数を渡しつつデバッグしたい場合

以下のように引数を渡せる

% dlv debug -- [引数]

% dlv debug -- import ecl --resources=computeServer,computeKeypair,networkNetwork,networkSubnet --connect=true --regions=jp4

これは通常実行時の以下と等価。

% go run main.go import ecl --resources=computeServer,computeKeypair,networkNetwork,networkSubnet --connect=true --regions=jp4

pythonでいうところの、pdb.set_trace()みたいなことをgoでやりたい場合

  1. コード内にて import "runtime" しておく
  2. runtime.Breakpoint() をブレークしたい場所に書いておく
  3. dlv debug して continue すると、そこで止まる

 dlv debug -- import ecl --resources=computeServer,computeKeypair,networkNetwork,networkSubnet --connect=true --regions=jp4
% dlv debug -- import ecl --resources=computeServer,computeKeypair,networkNetwork,networkSubnet --connect=true --regions=jp4
Type 'help' for list of commands.
=>no source available
(dlv) c

()

> github.com/GoogleCloudPlatform/terraformer/terraform_utils.ConnectServices() ./terraform_utils/connect.go:43 (PC: 0x25252b3)
    38:                             if ccc.InstanceState.Attributes[key] == tfResource.InstanceState.Attributes[v[0]] {
    39:                                 importResources[resource][i].InstanceState.Attributes[v[0]] = linkValue
    40:                                 importResources[resource][i].Item[v[0]] = linkValue
    41:                             } else {
    42:                                 runtime.Breakpoint()
=>  43:                                 for keyAttributes, j := range tfResource.InstanceState.Attributes {
    44:                                     match, err := regexp.MatchString(v[0]+".\\d+$", keyAttributes)
    45:                                     if match && err == nil {
    46:                                         if j == ccc.InstanceState.Attributes[key] {
    47:                                             importResources[resource][i].InstanceState.Attributes[keyAttributes] = linkValue
    48:                                             switch ar := tfResource.Item[v[0]].(type)

こんな感じで1行下で止まる。

長い文字列が、 ...+8 more" みたいになっちゃうのを全部表示したい

dlvのプロンプトで以下のように config max-string-len する。

(dlv) p info.Id
"ecl_compute_volume_attach_v2.1a1a0158-fb3c-4f23-9a87-57e452443a9...+8 more"
(dlv) config max-string-len 99999
(dlv) p info.Id
"ecl_compute_volume_attach_v2.1a1a0158-fb3c-4f23-9a87-57e452443a97-attach"
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1