【问题标题】:Weird Slice Pattern In Debug Mode - Go and Visual Studio Code调试模式下的奇怪切片模式 - Go 和 Visual Studio 代码
【发布时间】:2021-11-03 03:58:11
【问题描述】:

所以这并不是什么大不了的事,因为我最终得到了我想要的结果,但我想知道是否有人知道为什么当我在 Visual Studio 代码中使用调试器时我的切片会经历来回模式。

这是我所拥有的:


                partialKey := code + id + service
                state:="CA"
                clientId := "test"

                var combo = []string{partialKey + clientId + state,
                    partialKey + clientId + util.Constants.DEFAULT_STATE
                    partialKey + util.Constants.DEFAULT_ID + state,
                    partialKey + util.Constants.DEFAULT_ID + util.Constants.DEFAULT_STATE,
                }

当我调试代码并单击跳过按钮时,它会从切片的第一行开始执行这种奇怪的模式(var combo =... 所以我将调用该 line1,最后一行将是 line4)。 第1行 线2 第1行 线2 第 3 行 线2 第 3 行 第 4 行 第 3 行 第 4 行

然后我得到了预期的具有正确格式的四项切片,所以这不是一个真正的问题,但我只是好奇这是 Go 的事情还是这是由 Visual Studio 代码调试器引起的,有人可以告诉我为什么一个或另一个这样做?

【问题讨论】:

  • 我也观察到了,我的猜测是它会在不同的表达式之间进行切换,以便您可以根据需要进入其中的一些表达式。
  • 这可能是由于 Go 编译器中的错误(发出错误或不太直观的行信息)。检查生成了哪些行信息的一种简单方法是从命令行使用 dlv 和 disassemble 命令。

标签: go debugging visual-studio-code slice


【解决方案1】:

这是 delve 调试器在这种数组声明中的行为。

发生的情况是,数组中的每个项目都需要在插入数组之前进行构造。因此,当单步执行时,调试器会在每个表达式处停止。

var combo = []string{
  partialKey + clientId + state,                                        // EXP 1
  partialKey + clientId + util.Constants.DEFAULT_STATE,                 // EXP 2
  partialKey + util.Constants.DEFAULT_ID + state,                       // EXP 3
  partialKey + util.Constants.DEFAULT_ID + util.Constants.DEFAULT_STATE,// EXP 4
}

如果我们从数组初始化中提取项目构造,则数组在一个步骤中被初始化。

item1 := partialKey + clientId + state               
item2 := partialKey + clientId + util.Constants.DEFAULT_STATE
item3 := partialKey + util.Constants.DEFAULT_ID + state        
item4 := partialKey + util.Constants.DEFAULT_ID + util.Constants.DEFAULT_STATE

var combo = []string{item1, item2, item3, item4} // This is now one expression

【讨论】:

  • 我不确定为什么调试器在第一种情况下在每个表达式之间上升一行。希望任何有这方面知识的人加入,但我怀疑这是由于编译代码中的数组初始化略有不同。
猜你喜欢
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2016-08-27
相关资源
最近更新 更多