首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在调试器中运行Go二进制文件,同时传递参数?

在调试器中运行Go二进制文件并传递参数,可以通过以下步骤实现:

  1. 首先,确保已经安装了Go编程语言的开发环境,并且已经成功编译生成了Go二进制文件。
  2. 打开终端或命令提示符,进入到存放Go二进制文件的目录。
  3. 使用调试器工具来运行Go二进制文件。常用的调试器工具有GDB(GNU调试器)和Delve(Go语言专用调试器)。以下是使用Delve调试器的示例:
    • 如果尚未安装Delve,请先使用以下命令安装Delve调试器:
    • 如果尚未安装Delve,请先使用以下命令安装Delve调试器:
    • 运行以下命令启动Delve调试器,并指定要调试的Go二进制文件和传递的参数:
    • 运行以下命令启动Delve调试器,并指定要调试的Go二进制文件和传递的参数:
    • 其中,./your_binary_file是要调试的Go二进制文件的路径,your_arguments是要传递的参数。
  • Delve调试器会启动,并在终端中显示调试器的命令行界面。可以使用各种调试命令来控制程序的执行,例如设置断点、单步执行、查看变量值等。
    • 设置断点:使用break命令来设置断点,例如break main.main会在main函数的入口处设置断点。
    • 单步执行:使用next命令来单步执行程序,例如next会执行下一行代码并停在下一行。
    • 查看变量值:使用print命令来查看变量的值,例如print variable_name会打印出variable_name变量的值。
  • 在调试器中运行Go二进制文件时,可以通过在命令行中传递参数来模拟程序的不同运行情况。例如,如果Go二进制文件接受一个整数参数,可以在命令行中使用--分隔参数和Go二进制文件的路径,然后传递参数,如下所示:
  • 在调试器中运行Go二进制文件时,可以通过在命令行中传递参数来模拟程序的不同运行情况。例如,如果Go二进制文件接受一个整数参数,可以在命令行中使用--分隔参数和Go二进制文件的路径,然后传递参数,如下所示:
  • 其中,your_integer_argument是要传递的整数参数。

总结起来,使用Delve调试器可以在终端中运行Go二进制文件,并通过命令行传递参数。通过设置断点、单步执行和查看变量值等调试命令,可以方便地调试和分析Go程序的执行过程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【译】如何在生产环境跟踪 GO 函数的参数

这可以让我们检查应用程序正在做什么,并确定 bug 在代码的位置。观察状态的一种简单方法是使用调试器捕获函数参数。对于 Go 应用程序,我们通常使用 Delve 或 gdb。...Linux 上的 Go 二进制文件使用 ELF 存储调试信息。此信息是可以用的,即使在优化的二进制文件也是可以读取使用,除非已经剥离了调试数据(使用 strip 命令)。...这实际上是上面的输入参数 iterations;Go参数在堆栈上传递。 有了这些信息,我们现在可以深入研究并编写代码来跟踪 computeE 的参数。...Go 的许多方面,嵌套指针、接口、通道等,使这个过程很有挑战性,但是,要解决这些问题,需要另一种现有系统无法使用的检测模式。...当我们要对二进制状态进行可观察时,BPF 是不错的选择,即使是在附加调试器会有问题或有害的环境运行(例如生产二进制)。最大的缺点是即使是要观察很小的应用程序状态也需要代码。

81421

go run command

如果包参数有版本后缀( @latest 或 @v1.0.0),go run 将以模块感知模式构建程序,忽略当前目录或任何父目录go.mod 文件(如果有)。...默认情况下,“go run”直接运行已编译的二进制文件:“a.out 参数…”。...默认情况下,“go run”会编译二进制文件而不生成调试器使用的信息,以减少构建时间。要将调试器信息包含在二进制文件,请使用“go build”。...go run main.go (2)运行多个源文件go run file1.go file2.go (3)运行当前目录的 main 包。 go run . (4)传递参数给程序。...临时运行调试代码。 运行单个文件或多个文件,避免生成不必要的可执行文件。 通过传递参数测试不同的输入。

8610

使用 eBPF 在生产环境调试 Go 应用

本文是描述我们如何在生产中使用 eBPF 调试应用程序的系列文章的第一篇,无需重新编译/重新部署,这篇文章介绍了如何使用 gobpf[1] 和uprobes 为 Go 应用程序建立一个函数参数跟踪器,...介绍 通常在调试应用的时候,我们对捕获程序的状态比较感兴趣,这可以让我们检查应用程序正在做什么,并确定我们代码的错误所在,观察状态的一个简单方法是使用调试器来捕获函数参数,对于 Go 应用程序,我们经常使用的是...由于 uprobes 是通过插入调试陷阱指令来工作的,所以我们需要得到函数所在的地址,Linux 上的 Go 二进制文件使用 ELF 来存储调试信息,即使在优化的二进制文件,这些信息也是可用的,除非调试数据被剥离了...,Go参数是在栈上传递的。...总结 使用 uprobes 的 BPF 跟踪有它自己的优点和缺点,当我们需要对二进制状态进行观察时,使用 BPF 是有好处的,即使是在附加调试器会有问题或有害的环境运行时也是如此(例如生产二进制文件

1.8K20

在生产环境中使用 eBPF 调试 GO 程序

第 1 部分: 在生产环境中使用 eBPF 调试 Go 程序 这是本系列文章的第一篇,讲述了我们如何在生产环境中使用 eBPF 调试应用程序而无需重新编译/重新部署。...这使我们能够检查程序正在做什么,并确定缺陷在代码的位置。观察状态的一种简单方法是使用调试器来捕获函数的参数。对于 Go 程序来说,我们经常使用 Delve 或者 GDB。...调试器会导致程序中断,甚至允许修改状态,这可能会导致软件产生意外故障。 为了更好地捕获函数参数,我们将探索使用 eBPF(在 Linux 4.x+ 可用)以及高级的 Go 程序库 gobpf。...Linux 上的 Go 二进制文件使用 ELF 存储调试信息。除非删除了调试数据,否则即使在优化过的二进制文件也可以找到这些信息。...这实际上就是上面的输入参数 iterations。Go参数在栈上传递。 有了这些信息,我们现在就可以继续深入,编写代码来跟踪 computeE 的参数了。

1.5K10

第 1 部分: 在生产环境中使用 eBPF 调试 Go 程序

这使我们能够检查程序正在做什么, 并确定缺陷在代码的位置. 观察状态的一种简单方法是使用调试器来捕获函数的参数. 对于 Go 程序来说, 我们经常使用 Delve 或者 GDB....为了更好地捕获函数参数, 我们将探索使用 eBPF(在 Linux 4.x+ 可用) 以及高级的 Go 程序库 gobpf. eBPF 是什么 ?...Linux 上的 Go 二进制文件使用 ELF 存储调试信息. 除非删除了调试数据, 否则即使在优化过的二进制文件也可以找到这些信息....这实际上就是上面的输入参数 iterations. Go参数在栈上传递. 有了这些信息, 我们现在就可以继续深入, 编写代码来跟踪 computeE 的参数了....下图显示了 Linux 内核如何使用uprobe 修改二进制文件. 软中断指令(int3)作为第一条指令被插入 main.computeE .

1.3K11

Go 常用命令介绍

1.1 go build Go 是强类型编译型语言,因此编译时会将所有依赖编译进同一个二进制文件。...-t 同时也下载需要为运行测试所需要的包 -u 强制使用网络去更新包和它的依赖包 -v 显示执行的命令 看一个实际的例子: 在本地通过源码安装 Go调试器 Delve,可以这么做: go get...当你运行 go install 时,它会编译当前目录Go 代码,并将生成的二进制可执行文件放置在你的 Go 工作空间的 bin 目录(通常位于 GOPATH )。...-x:打印执行的命令及参数。 -race:启用数据竞争检测。 -gcflags:传递参数给编译器,优化级别等。 -buildmode:指定编译模式,共享库或插件等。...-ldflags:传递参数给链接器。 -trimpath:去除输出文件路径信息。 -memprofile:写入内存概要文件。 -cpuprofile:写入CPU概要文件

40820

Go实战之常用命令行工具

运行这些程序最常见的方式是作为go程序的子命令,例如 go fmt,该命令的运行方式是由go程序使用适合于包级处理的参数调用底层二进制文件,对go源代码的完整包进行操作;这些程序也可以作为独立的二进制文件运行...,使用go tool子命令(go tool cgo)使用未修改的参数;某些命令(pprof)只能通过go tool子命令访问。...通常,包被指定为来自单个目录的.go文件列表,但它也可能是与单个已知包匹配的导入路径、文件系统路径或模式,go run.”或“go run my/cmd” 默认情况下,“go run”直接运行编译后的二进制文件...在此模式下,go test编译当前目录包的源码和测试文件,然后运行生成的测试二进制文件。在此模式下,将禁用缓存。...当测试结果可以从缓存恢复时,go test将重新显示以前的输出,而不是再次运行测试二进制文件。当发生这种情况时,go测试打印(缓存)代替汇总行测试花费的时间 ?

87710

Go 1.19 发行说明(翻译)

即使静态链接,编译后的二进制文件也无法在这些系统上运行。此类不受支持的系统上的用户仅限于分发提供的 Go 包。 4.2 RISC-V 该 riscv64 端口现在支持使用寄存器传递函数参数和结果。...5.3 Go 命令 -trimpath 标志(如果设置)现在可以通过 go build 标记到 Go 二进制文件的构建设置 ,并且可以使用 go version -m 或检查 debug.ReadBuildInfo...此内存限制包括 Go 堆和运行时管理的所有其他内存,不包括外部内存源,例如二进制文件本身的映射、其他语言管理的内存以及操作系统代表 Go 程序持有的内存。...在 ARM64 上添加了对调试器注入函数调用的支持,使用户能够在使用经过更新以利用此功能的调试器时,在交互式调试会话从其二进制文件调用函数。...这消除了一个常见的安全问题来源, 但也可能破坏现有的程序,这些程序依赖于在当前目录使用exec.Command("prog")运行名为 prog(或在 Windows 上叫 prog.exe)的二进制文件

1.1K20

GO】《GO HANDBOOK》读书笔记

具备可移植(编译后的 Go 程序是二进制文件,不需要其他文件就能运行,而且是跨平台的,因此可以很容易地分发) 单调、稳定、可预测,犯错的机会少 。 能充分发挥多线程优势 2.如何开始?...binaries folder to the path.注意:由于安装程序在路径添加了 Go 二进制文件夹,运行程序前可能需要打开一个新的终端。...Go 是可移植的,因为本质编译之后本质就是二进制文件,这样每个人都可以按原样运行程序,并且二进制文件已经打包供执行。...例如,当我在 VS Code 中加载 hello.go 文件时,它提示我安装 gopls 命令、Delve 调试器 (dlv) 和 staticcheck linter。...(需要两个参数)算术运算符, + - * / %。

14110

2019年3月21日 Go生态洞察:在Go 1.12调试你部署的代码

2019年3月21日 Go生态洞察:在Go 1.12调试你部署的代码 摘要 猫头虎博主在此!今天我们将深入探索Go 1.12的一项关键改进——如何调试优化后的二进制文件。...引言 Go 1.11和Go 1.12在使开发者能够调试他们部署到生产环境的优化二进制文件方面取得了重大进展。随着Go编译器在产生更快二进制文件方面变得越来越积极,我们在可调试性方面失去了一些优势。...在Go 1.10,用户需要完全禁用优化,才能从像Delve这样的交互式工具获得良好的调试体验。但用户不应该为了调试而牺牲性能,尤其是在运行生产服务时。...在1.12和最新的Delve版本,即使在优化后的二进制文件,你也应该能够检查许多变量。 改进的值检查 在Go 1.10,调试优化后的二进制文件时,变量值通常完全不可用。...与此相反,从Go 1.11开始,即使在优化的二进制文件,变量通常也可以检查,除非它们完全被优化掉了。

9210

何在 CentOS 8 上安装 GCC

GNU 编译器集合是一系列用于语言开发的编译器和库的集合,包括: C, C++, Objective-C, Fortran, Ada, Go, and D等编程语言。...本文描述如何在 CentOS 8 上安装 GCC。...一、 在 CentOS 上安装 GCC 默认的 CentOS 软件源包含了一个软件包组,名称为 “Development Tools”,它包含了 GNU 编辑器集合,GNU 调试器,和其他编译软件所必需的开发库和工具...dnf install man-pages 通过使用gcc --version命令打印 GCC 版本,来验证 GCC 编译器是否被成功安装: gcc --version 在 CentOS 8 软件源...\n"); return 0; } 保存文件,并且将它编译成可执行文件运行: gcc hello.c -o hello 在你运行这个命令的时候,一个命名为hello的二进制文件将会在同一个目录被创建

3.7K30

动态追踪技术(四):基于 Linux bccBPF 实现 Go 程序动态追踪

} 一、gccgo Function Counting 我开始会使用 gccgo 编译,然后使用 Go gc 编译器 。(区别:gccgo 可以生成优化后的二进制文件,但是基于老版本的 Go。)...输出结果包含该程序的 fmt.Println() 函数调用。 我不需要进入任何特殊的模式才能实现这个效果,对于一个已经在运行Go 应用我可以直接开始测量而不需要重启进程。...它目前能够同时处理 1000 个探测点,匹配 “fmt.*” 时运行正常,但是匹配 libgo 的所有函数就出现异常。诸如此类的问题在 bcc/BPF 还有不少,我们需要寻找其它的方法来处理。...ABI涵盖了各种细节,: 数据类型的大小、布局; 调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最先...push到栈上还是最后; 目标文件二进制格式、程序库等等。

2.8K50

Go语言入门经典》16~18章读书笔记

16.4 使用Delve Go语言没有官方调试器,但很多社区项目都提供了Go语言调试器。Delve就是一个这样的项目,它为Go项目提供了丰富的调试环境。...标准输出 1 包含显示到屏幕上的输出 标准错误 2 标准错误是来自程序的错误,包含显示到屏幕上的错误消息 17.2 访问命令行参数Go语言中,要读取传递给命令行程序的参数,可使用标准库的os包。...指定作为参数传递的值的类型。 设置标志的默认值。 自动生成帮助文本。 下面的程序演示了flag包的用法。...,以便能够在任何地方,而不是只能在命令gobuild生成的二进制文件所在的文件才能访问它。...go install用于安装本地包,这可能是您编写的文件,也可能是您从网上或文件服务器中下载的文件go install从远程服务器(Github)获取文件,并像go install那样安装它们。

55120

第6课 用SI编写Hello World智能合约,开启EOS之旅

Source Insight是如今最好用的语言编辑器之一,支持几乎所有的语言, C、C++、ASM、PAS、ASP、HTML,PHP,JSON,Python等常见的,也可以通过导入配置文件的方式支持GO...ABI涵盖了各种细节,: 数据类型的大小、布局和对齐; 调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;...通过栈传递的第一个函数参数是最先push到栈上还是最后; 系统调用的编码和一个应用如何向操作系统进行系统调用; 以及在一个完整的操作系统ABI[目标文件二进制格式、程序库等等。...[1] ABI不同于API ,API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统编译 ,然而ABI允许编译好的目标代码在使用兼容ABI的系统无需改动就能运行。...代码定义了合约如何运行,abi描述了参数何在二进制和json表示之间进行转换。 这个命令最后一个参数是-p wangdenghui。

88720

2010年11月02日 Go生态洞察:Go代码调试的现状报告

不论你是因为没有耐心单步跟踪,还是手头上没有源代码,一个好的调试器总是宝贵的。通过我独家搜罗的资讯,你将会了解到Go的gc链接器对GDB(GNU调试器)的支持进展。...在最新发布的版本(2010-11-02),链接器在生成ELF(Linux, FreeBSD)或Mach-O(Mac OS X)二进制文件时,会发出DWARF3调试信息。...DWARF调试信息的强大之处 ✨ DWARF调试信息足够丰富,可以让你做到以下几点: 在GDB版本7.x中加载Go程序, 按行列出所有Go、C和汇编源文件Go运行时的部分是用C和汇编写的), 按行设置断点并逐步跟踪代码...切片和字符串变量按照它们在运行时库的底层结构表示,你必须解引用数据指针来检查元素。 尚待解决的问题 无法检查通道、函数、接口和映射变量。 运行时的C变量没有附加类型信息。...Windows和ARM二进制文件不包含DWARF调试信息,因此无法用GDB检查。 总结知识要点 特性 描述 DWARF调试信息 让GDB能够加载Go程序,并提供代码跟踪、堆栈检查等功能。

8810
领券