阅读更多

0顶
0踩

开源软件

原创新闻 godebug:一个跨平台的Go程序调试工具

2015-04-22 09:45 by 副主编 mengyidan1988 评论(0) 有5919人浏览
godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。

godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了gopherjs ,你也可以在浏览器上进行调试:



点击此处尝试原文调试窗口。通过原文的“DEBUG IT”按钮,你可以编辑程序并重新调试它。

工作原理

下面这张是描述上面例子的矢量图:



从中可以看出原始代码转换了两次:第一次godebug插入调试instrumentation,然后gopherjs将结果编译成JavaScript。

让我们看一下instrumentation步骤,以下是godebug插入的调用:
  • godebug.EnterFunc:让godebug运行时库知道我们在进入一个函数。由于“next”不停止内部函数调用,运行时库注意这些调用并知道何时跳过这些行。
  • godebug.ExitFunc:让godebug运行时库知道我们在离开一个函数,main中省略。
  • godebug运行时库:当且仅当用户用命令或一个断点告知其时,使程序暂停并等待输入,暂停时,它会提示用户输入并响应任何命令。
  • godebug.Declare:记录变量名和值的映射。该映射通过输出命令使用。

使用godebug

Step 1.安装



Step 2.设置断点

在任何想要断点的地方添加这个标记:



由于断点是源代码的一部分,你可以将自己的逻辑置于他们周围。假设你正在运行一个表格驱动多情况测试,其中一个测试输入“weird string”的情况是失败的,那么你可以将下面这个断点放入测试当中:



godebug test将于标记处暂停程序,方便定位。

Step 3.运行程序

使用godebug运行命令:



或者对测试来说 ,运行测试命令:



默认情况下,godebug只会添加调试instrumentation到package main(为了godebug运行)或者测试下的package(为了godebug测试)。这意味着在默认情况下,你无法进入来自导入包的函数。当需要的时候,执行下面这个行命令:



最后

godebug仍然还是一款需要打磨的新工具,目前存在的已知限制包括:
  • 性能开销
  • 可能会导致读取冲突,如果你的程序读取自stdin
  • 无法附上一个正在运行的进程
  • 开始前必须要知道你索要调试的包

其在GitHub上的地址点此进入
  • 大小: 81 KB
  • 大小: 129.6 KB
  • 大小: 9.7 KB
  • 大小: 7.1 KB
  • 大小: 22 KB
  • 大小: 7.1 KB
  • 大小: 4.5 KB
  • 大小: 13.4 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • godebug:已弃用! https

    Go的跨平台调试器。 如何? godebug使用源代码生成来通过调试调用对程序进行检测。 采用类似的方法覆盖代码。 运行godebug ,它将解析程序,分析函数调用,变量声明和语句行,将结果代码输出到某个地方,然后运行/...

  • 通关GO语言22 网络编程:Go 语言如何通过 RPC 实现跨平台服务?

    RPC,也就是远程过程调用,是分布式系统中不同节点调用的方式(进程...序列化和反序列化是一种把传输内容编码和解码的方式,常见的编解码方式有 JSON、Protobuf 等。在大多数 RPC的架构设计中,都有Client、、Server、

  • 【Go网络编程:Go如何通过RPC实现跨平台服务】

    Go如何玩转RPC服务

  • Go语言爱好者周刊:第 165 期 —— 基于 fyne 实现一个简单计算器

    这里记录每周值得分享的 Go 语言相关内容,周日发布。本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2] 。鉴于一些人可能没法坚持把英文文章看完,因此...

  • GO debug - delve

    大纲 简介 演示 多 goroutine 调试 core 调试 线上 调试 ...支持并发调试、跨平台; 2 演示 2.1 下载delve go get github.com/go-delve/delve/cmd/dlv 2.2 常用调试命令 以下为用来演示的被调试代...

  • Go 学习笔记(37)— 标准命令行工具(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get、go vet)

    Go 本身包含来大量用于处理 Go 程序的命令和工具。 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件。命令源码文件会被编译成可执行文件,并存放到命令执行的目录或指定目录下。而库源码文件被编译...

  • Go工具和调试详解

    工具集 go build -gcflags: 传递给编译器的参数 -ldflags: 传递给链接器的参数 -work: 查看编译临时目录 -race: 允许数据竞争检测(仅支持amd64) -n: 查看但不执行编译指令 -x: 查看并执行编译命令 -a: 强制...

  • go语言有哪些好的debug方法?

    作者:Davie ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请...1、godebug godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符...

  • vscode配置golang远程开发调试环境

    在golang项目开发中,特别是需要跨平台的项目时,很多时候需要在远程环境下进行开发、编译、调试,比如嵌入式linux场景,我们在windows下开发好的代码,可能需要在linux环境运行,需要在此环境下编译程二进制文件,...

  • Go+Wails学习笔记(一)环境搭建与配置

    Go语言有一些笔者很喜欢的特点,譬如跨平台、交叉编译(在某个环境中编译其他平台的程序)、支持并发、语言上做“减法”精简关键字、直接静态编译成单个二进制可执行文件(告别缺少vcruntime.dll的痛苦)。...

  • openresty 静态库_Go实现的库的跨平台编译调用

    不过对于每个平台还需要有相应的C编译工具链的支持,对不同平台的支持程度也不一致,需要针对每个平台单独处理。新建文件 lib.go,通过import C启用cgo,export指定需要导出的方法。cgo编译后会生成相应的头文件,在...

  • c++跨平台软件 vscode 各个平台下的debug教程

    目录标题相关概念日志调试实操windows平台 相关概念 一般来说我们分析BUG,大概分为两种 根据软件内部已有的插桩日志,记录关键节点信息、重要函数的输入输出,根据这些信息判断bug 调试(Debug),让代码一步一步...

  • uni-app开发工具: HBuilderX运行配置、调试、项目基础配置、开发规范

    微信小程序开发工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html Serverless WordPress 建站 https://kunnan.blog.csdn.net/article/details/120020130 I HBuliderX的使用 1.1...

  • [IDE]VSCode+Premake5打造(c++)跨平台开发调试工具(4): Premake5

    在正式引用第3方库SFML之前,先开始premake5,因为现在cpp文件只有一个Main.cpp,还好管理。现在我们就按照正常开发C++的步骤来。PS:CMake是不会去学的,打死都不会的。 现在Source目录下创建新的文件夹Engine,...

  • 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

    【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

  • Go开发工具

    LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。 图1.4 LiteIDE主界面 LiteIDE主要特点: 支持主流操作系统 Windows Linux MacOS X Go编译环境管理和切换 管理...

  • [IDE]VSCode+Premake5打造(c++)跨平台开发调试工具(3): VSCode编译和调试C++

    之前已经创建好了目录结构,现在只需要在Game/SFML/Source创建一个新的文件Main.cpp,代码很简单,就是用来调试使用。 #include <iostream> int main(int args, char* argv[]) { std::cout << ...

  • Go 语言入门指南: 环境搭建、基础语法和常用特性解析 | 青训营

    Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob...Go语言的设计目标是简单、高效、可靠,并且易于编程,以解决其他编程语言的一些痛点和限制。并发支持。

  • 基于springboot框架的毕业设计系统的开发(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对学生毕业设计信息管理的提升,也为了对学生毕业设计信息进行更好的维护,毕业设计系统的出现就变得水到渠成不可缺少。通过对毕业设计系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 毕业设计系统通过MySQL数据库与Spring Boot框架进行开发,毕业设计系统能够实现教师管理,公告类型管理,班级管理,课题信息管理,任务类型管理,选题申请管理,学院管理,课题任务管理,最终成绩管理,公告信息管理,学生管理等功能。 通过毕业设计系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源

Global site tag (gtag.js) - Google Analytics