如何使用GoLand debug
debug 常用操作
/*
如何使用 goland debug goroutine
*/
package main
import (
	"fmt"
	"runtime"
	"sync"
)
type Tester interface {
	test1()
	test2()
	test3()
}
type T struct {
	a int
	s *sync.WaitGroup
}
func main() {
	fmt.Println("main start!")
	s := &sync.WaitGroup{}
	s.Add(3)
	t := T{a: 1, s: s} // 断点
	// bebug 到这里时,需要在帧栏目中选择 main.test1 的协程帧,不然不会 debug到 test1 函数内部的.或者光标放入 test1 函数内部,点击运行到光标处也行
	go t.test1() // 断点
	go t.test2()
	go t.test3() // 断点
	s.Wait()
	fmt.Println("main end!")
}
// 如何进入 goroutine
func (t *T) test1() {
	defer func() {
		t.s.Done()
	}()
	t.a++ // 断点
	fmt.Println("test1", t.a)
}
//异常断点
func (t *T) test2() {
	defer func() {
		// 发生宕机时,获取panic传递的上下文并打印
		err := recover()
		switch err.(type) {
		case runtime.Error: // 运行时错误
			fmt.Println("runtime error:", err)
		default: // 非运行时错误
			fmt.Println("error:", err)
		}
		t.s.Done()
	}()
	t.a++
	panic("制造一个错误")
	fmt.Println("test2", t.a)
}
// 如何跳过循环
func (t *T) test3() {
	fmt.Println("test start!") // 断点
	for i := 0; i < 30; i++ {  // debug 到一些循环时,不想跟踪每个循环运行,可以点击 步出(F8)跳到下一个 debug 点
		fmt.Println("test3", i)
	}
	fmt.Println("test end!") // 断点
	t.s.Done()
}
/*
调试心得:
1.要是协程帧打不开,那可能是帧太多了,可以在 goland 的设置中设置协程数限制
2.有时候上面的方式切换不到想看的协程,可以在协程运行附近(go XXX()处),试试使用运行到光标处(光标放到协程函数中)
3.有时候单步运行到了循环中,同样可以使用运行到光标处(光标点击到循环外)或者点击回复程序按钮(最好在循环外打一个端点,点击恢复程序按钮会运行到此处)
3.https://www.jetbrains.com/help/go/debugging-code.html 官方教程,但感觉没说很细
*/
如何使用GoLand debug的更多相关文章
- Goland debug失败
		在使用goland使用debug调试代码出现 API server listening at: 127.0.0.1:56871could not launch process: debugserver ... 
- IDE Goland DEBUG报错(could not launch process: decoding dwarf section info at offset 0x0: too short)
		背景: 在升级GO版本到1.11后发现Goland的Debug报错,如下:could not launch process: decoding dwarf section info at offset ... 
- 《k8s-1.13版本源码分析》-调度优选
		源码分析系列文章已经开源到github,地址如下: github:https://github.com/farmer-hutao/k8s-source-code-analysis gitbook:ht ... 
- jmeter sampler maven项目排错记
		eclipse 创建的maven项目,引入jar包之后出现红色叹号,一直找不到原因,连main方法都无法运行,提示找不到类: 错误: 找不到或无法加载主类 soapsampler.SoapSample ... 
- JetBrains GoLand 以debug运行Go程序时出现could not launch process: decoding dwarf section info at offset 0x0: too short报错之保姆级别解决方案
		这是一篇写给刚开始学习Go语言而在搭建环境可能遇到问题的小萌新的文,大神请自行绕路哈(0-0) 有天,我把Go运用环境升到最新版1.16后,用以前一直在用的JetBrains GoLand 2017. ... 
- debugging kubernetes (Delve and Goland)
		1. Build from source cd GOPATH mkdir k8s.io cd k8s.io git clone https://github.com/kubernetes/kubern ... 
- Goland could not launch process: decoding dwarf section info at offset 0x0: too short 解决方案
		1 前言 Goland版本:2018.1.5 Go:1.11.2 此版本调试不了bug,而且有时会显示could not launch process: decoding dwarf section ... 
- 修改zerolog使log输出的文件名可以在goland里自动定位--技巧
		如何自动定位文件 最近发现goland会自动识别输出的文件或者url,但是有时候又识别不出来,折腾了一下,发现原来要求文件路径或url两边要有空格 改造zerolog 既然如此,那么让我们来改造一下z ... 
- Goland快捷键(Macbook)
		Goland快捷键(Macbook) 基础编辑快键键 向上或向下移动当前行 ⇧⌘↑ ⇧⌘↓ 复制并粘贴当前选中的语句 ⌘D 删除当前行 ⌘⌫ 行注释 ⌘/ 块注释 ⌥⌘/ 在当前打开的文件中寻找 ⌘F ... 
随机推荐
- Ubuntu-搭建Clang Static Analyzer环境
			其实也就是一个开源的漏洞扫描器 专门扫描C/C++ 0BJECT-C++这种,实不相瞒我搭建了5天这个环境,最后我发现了一种超级方便的办法 前面怎么走的坑还是不分享了吧,由于没有看到前面很多人的办法或 ... 
- 【linux】驱动-5-驱动框架分层分离&实战
			目录 前言 5. 分离分层 5.1 回顾-设备驱动实现 5.2 分离分层 5.3 设备 5.4 驱动 5.5 系统,模块 5.6 Makefile 参考: 前言 5. 分离分层 本章节记录实现LED驱 ... 
- PReact10.5.13源码理解
			React源码看过几次,每次都没有坚持下来,索性学习一下PReact部分,网上讲解源码的不少,但是基本已经过时,所以自己来梳理下 render.js部分 import { EMPTY_OBJ, EMP ... 
- Prometheus联邦
			联邦使得一个 Prometheus 服务器可以从另一个 Prometheus 服务器提取选定的时序. 1. 使用场景 Prometheus 联邦有不同的使用场景.通常,联邦被用来实现可扩展的 Prom ... 
- C#类的一些基础知识(静态方法可以不用实例化调用)
			将类成员函数声明为public static无需实例化即可调用类成员函数 using System; namespace ConsoleApp { class Program { static voi ... 
- git版本控制之三
			[删除文件]使用关键字 git rm '待删除的文件名或者文件夹名字' 这个默认会把本地和版本库里面的这个文件都删掉!!! 有一种情形就是我往版本库里面提交错了文件,我想从版本库里面移除,但是我本地 ... 
- Java(100-113)【类与对象、封装、构造方法】
			1.对象的创建以及使用 Student stu =new Student(); 根据一个类创建一个对象 导包.创建.使用 2.手机练习 有main才能run Phone.java package cn ... 
- 关于Green AI
			上一篇文章提到了模型不环保这个话题.这篇文章就这个问题展开唠叨一下. 自从BERT, GPT此类的大型模型诞生以来,小作坊们除了把pre-trained的模型拿过来微调一下,就束手无策了,因为成本实在 ... 
- 【笔记】《Redis设计与实现》chapter8 对象
			8.1 对象的类型与编码 Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个属性分别是type属性.encoding属性和ptr属性 typedef struc ... 
- 一文教你读懂JVM的类加载机制
			Java运行程序又被称为WORA(Write Once Run Anywhere,在任何地方运行只需写入一次),意味着我们程序员小哥哥可以在任何一个系统上开发Java程序,但是却可以在所有系统上畅通运 ... 
