search
HomeBackend DevelopmentGolangHow to debug golang linux

How to debug golang linux

May 14, 2023 pm 03:25 PM

Go language is a high-level programming language published for more convenient and faster development. It can not only run on multiple operating systems such as Windows, MacOS and Linux, but also provides powerful debugging tools. Help developers solve problems. This article will introduce how to debug Go language programs on Linux systems.

Debugging Tools

The Go language provides a built-in debugger - go debug, but the efficient features of Go also bring many debugging challenges. Dlv (https://github.com/go-delve/delve) is a modern debugger for the Go language that supports Go-specific debugging features. Dlv provides common debugging functions such as single-step tracing, viewing variables, modifying variables, and breakpoints. In addition, GDB also supports Go language debugging, but it cannot understand the Go language scheduler, so it is more suitable for kernel development or program debugging that only needs to use a few Go-specific functions.

Installing Dlv

Dlv is written in Go language, so installing it requires installing the Go language itself first. You can download the latest version of the Go language installation package from the official website (https://golang.org/dl/) and configure it into the environment variables.

After installing the Go language, we need to first install the library that Dlv depends on - dynamically linked Linux utilities:

sudo apt-get update
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

Then execute the following command to install Dlv:

go get -u github.com/go-delve/delve/cmd/dlv

The above command Install Dlv into the $GOPATH/bin directory, you can add it to the PATH variable manually, or you can add it to the PATH with the following command:

echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bashrc
source ~/.bashrc

Compile Debugger

We need Enter the directory where the program is located, use go build to compile the program and generate a binary file. Assuming that our program is named debug-demo, we can compile it with the following command:

go build -gcflags "-N -l" -o debug-demo
  • -gcflags "-N -l": Add the compilation flag to ensure that the compiler will not optimize the code, thus Convenient for debugging.
  • -o debug-demo: Name the generated executable file debug-demo.

In order to solve the problem of source code being assembled, we can also use the go env command to get the value of CGO_ENABLED, set it to 0, and then compile again:

go env
go build -gcflags "-N -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go

Set break Click

Setting breakpoints in the program is the most commonly used operation during debugging. We can set a breakpoint anywhere in the code to wait until the program execution reaches that location.

Using Dlv, you can set breakpoints in the following two ways:

  1. Graphic interface (recommended)

Using Dlv's graphical interface can be more intuitive Manipulate and modify programs. Execute the following command, and then the graphical interface will automatically open:

dlv debug ./debug-demo
  1. Command line

Execute the following command to enter the Dlv command line mode:

dlv debug ./debug-demo --headless --listen=:2345 --api-version=2

Enter Dlv After that, we can use the break (or abbreviated as b) command to set a breakpoint:

(b)reak {<location>|<function>|<filename>:<line>|<remote package path>}: 设置断点
(b)reakpoints: 显示当前所有的断点
(d)elete {<breakpoint#>|<breakpoint.id>}: 删除断点#或通过Breakpoint.id删除指定断点
(c)ontinue: 从当前位置继续执行程序,直到下一个断点或程序完结

For example, we can set a breakpoint on line 10 of the program:

(b)reak main.go:10

Control the program running

During the running of the program, you can use the step (or abbreviated as s) and next (or abbreviated as n) commands to control the program running:

(s)tep: 单步调试,如果当前位置是函数,则进入该函数内部
(n)ext: 单步调试,如果当前位置是函数,则不进入该函数内部

View variables

Dlv is also provided In order to display the variable command, use the print (or abbreviated as p) command to view the variables in the current scope:

(p)rint <variable>: 显示变量

For example, we can use the following command to view variable a and variable b:

(p)rint a
(p)rint b

Modify variables

In addition to viewing variables, Dlv also supports modifying the value of variables. Use the set command to modify the value of variables:

(s)et <variable> = <value>: 修改变量的值

For example, we can use the following command to set the value of variable a Modified to 100:

(s)et a = 100

Summary

This article introduces how to use Dlv to debug Go programs on Linux systems. First, we installed the Go language and Dlv debugger, then used go build to compile the program and set breakpoints in the program, used Dlv's graphical interface or command line to control the program to run, and view and modify the values ​​of variables to solve Go Problems encountered during program debugging. I hope that through this article, readers can master the basic skills of using Dlv to debug Go programs under Linux systems.

The above is the detailed content of How to debug golang linux. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Mastering Go Strings: A Deep Dive into the 'strings' PackageMastering Go Strings: A Deep Dive into the 'strings' PackageMay 12, 2025 am 12:05 AM

You should care about the "strings" package in Go because it provides tools for handling text data, splicing from basic strings to advanced regular expression matching. 1) The "strings" package provides efficient string operations, such as Join functions used to splice strings to avoid performance problems. 2) It contains advanced functions, such as the ContainsAny function, to check whether a string contains a specific character set. 3) The Replace function is used to replace substrings in a string, and attention should be paid to the replacement order and case sensitivity. 4) The Split function can split strings according to the separator and is often used for regular expression processing. 5) Performance needs to be considered when using, such as

'encoding/binary' Package in Go: Your Go-To for Binary Operations'encoding/binary' Package in Go: Your Go-To for Binary OperationsMay 12, 2025 am 12:03 AM

The"encoding/binary"packageinGoisessentialforhandlingbinarydata,offeringtoolsforreadingandwritingbinarydataefficiently.1)Itsupportsbothlittle-endianandbig-endianbyteorders,crucialforcross-systemcompatibility.2)Thepackageallowsworkingwithcus

Go Byte Slice Manipulation Tutorial: Mastering the 'bytes' PackageGo Byte Slice Manipulation Tutorial: Mastering the 'bytes' PackageMay 12, 2025 am 12:02 AM

Mastering the bytes package in Go can help improve the efficiency and elegance of your code. 1) The bytes package is crucial for parsing binary data, processing network protocols, and memory management. 2) Use bytes.Buffer to gradually build byte slices. 3) The bytes package provides the functions of searching, replacing and segmenting byte slices. 4) The bytes.Reader type is suitable for reading data from byte slices, especially in I/O operations. 5) The bytes package works in collaboration with Go's garbage collector, improving the efficiency of big data processing.

How do you use the 'strings' package to manipulate strings in Go?How do you use the 'strings' package to manipulate strings in Go?May 12, 2025 am 12:01 AM

You can use the "strings" package in Go to manipulate strings. 1) Use strings.TrimSpace to remove whitespace characters at both ends of the string. 2) Use strings.Split to split the string into slices according to the specified delimiter. 3) Merge string slices into one string through strings.Join. 4) Use strings.Contains to check whether the string contains a specific substring. 5) Use strings.ReplaceAll to perform global replacement. Pay attention to performance and potential pitfalls when using it.

How to use the 'bytes' package to manipulate byte slices in Go (step by step)How to use the 'bytes' package to manipulate byte slices in Go (step by step)May 12, 2025 am 12:01 AM

ThebytespackageinGoishighlyeffectiveforbyteslicemanipulation,offeringfunctionsforsearching,splitting,joining,andbuffering.1)Usebytes.Containstosearchforbytesequences.2)bytes.Splithelpsbreakdownbyteslicesusingdelimiters.3)bytes.Joinreconstructsbytesli

GO bytes package: What are the alternatives?GO bytes package: What are the alternatives?May 11, 2025 am 12:11 AM

ThealternativestoGo'sbytespackageincludethestringspackage,bufiopackage,andcustomstructs.1)Thestringspackagecanbeusedforbytemanipulationbyconvertingbytestostringsandback.2)Thebufiopackageisidealforhandlinglargestreamsofbytedataefficiently.3)Customstru

Manipulating Byte Slices in Go: The Power of the 'bytes' PackageManipulating Byte Slices in Go: The Power of the 'bytes' PackageMay 11, 2025 am 12:09 AM

The"bytes"packageinGoisessentialforefficientlymanipulatingbyteslices,crucialforbinarydata,networkprotocols,andfileI/O.ItoffersfunctionslikeIndexforsearching,Bufferforhandlinglargedatasets,Readerforsimulatingstreamreading,andJoinforefficient

Go Strings Package: A Comprehensive Guide to String ManipulationGo Strings Package: A Comprehensive Guide to String ManipulationMay 11, 2025 am 12:08 AM

Go'sstringspackageiscrucialforefficientstringmanipulation,offeringtoolslikestrings.Split(),strings.Join(),strings.ReplaceAll(),andstrings.Contains().1)strings.Split()dividesastringintosubstrings;2)strings.Join()combinesslicesintoastring;3)strings.Rep

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools