您好、欢迎来到现金彩票网!
当前位置:红彩会 > 分派程序 >

go程序如何分配堆栈的

发布时间:2019-07-19 18:04 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  在Go语言中有一些调试技巧能帮助我们快速找到问题,有时候你想尽可能多的记录异常但仍觉得不够,搞清楚堆栈的意义有助于定位Bug或者记录更完整的信息。

  堆栈信息中显示了在panic抛出这个时间所有的goroutines状态,发生的panic的goroutine会显示在最上面。

  这里展示了在main中带参数调用Example函数时的堆栈信息,比较就能发现两者的参数数量并不相同,Example定义了3个参数,堆栈中显示了6个参数。现在的关键问题是我们要弄清楚它们是如何匹配的。

  第1个参数是string类型的slice,我们知道在Go语言中slice是引用类型,即slice变量结构会包含三个部分:指针、长度(Lengthe)、容量(Capacity)

  我们现在来看第二个参数,它是string类型,string类型也是引用类型,它包括两部分:指针、长度。

  可以确定,堆栈信息中第4、5两个参数对应代码中的string参数,如下图所示:

  如上所示修改代码,将Example定义为trace的方法,并通过trace的实例t来调用Example。

  首先注意第2行的方法调用使用了pointer receiver,在package名字和方法名之间多出了*trace字样。另外,参数列表的第1个参数标明了结构体(t)地址。我们从堆栈信息中看到了内部实现细节。

  如果有多个参数可以填充到一个single word, 则这些参数值会合并打包:

  这个例子修改Example函数为4个参数:3个bool型和1个八位无符号整型。bool值也是用8个bit表示,所以在32位和64位架构下,4个参数可以合并为一个single word。

  以上展示了参数值是如何匹配到4个参数的。当我们看到堆栈信息中包括十六进制值,需要知道这些值是如何传递的。

http://m3-ctech.com/fenpaichengxu/639.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有