一、dlv --help
– 查看 Delve 调试器的帮助信息
- 解释: 该命令用于查看 Delve 调试器的帮助信息,提供了有关 Delve 的基本介绍以及可用命令和选项的详细说明。
- 使用方式: 在命令行中输入
dlv --help
。 - 导致结果: 显示 Delve 调试器的帮助信息,包括调试器的目标、基本使用方式、可用命令列表以及其他帮助主题的链接。
Delve 是用于 Go 程序的源码级调试器,它能够通过控制进程的执行、评估变量以及提供线程/ goroutine 状态、CPU 寄存器状态等信息来与程序交互。该工具旨在为调试 Go 程序提供简单而强大的界面。
可以通过 --
标志将标志传递给要调试的程序,例如:
dlv exec ./hello -- server --config conf/config.toml
Available Commands
attach
: 附加到正在运行的进程并开始调试。connect
: 连接到headless调试服务器,使用终端客户端进行通信。core
: 检查核心转储文件。dap
: 启动通过 Debug Adaptor Protocol (DAP) 进行通信的无头 TCP 服务器。debug
: 编译并开始调试当前目录中的主包或指定的包。exec
: 执行预编译的二进制文件,并开始调试会话。help
: 获取有关任何命令的帮助。test
: 编译测试二进制文件并开始调试程序。trace
: 编译并开始跟踪程序。version
: 打印版本信息。
Additional help topics
dlv backend
: 关于 –backend 标志的帮助。dlv log
: 关于日志标志的帮助。dlv redirect
: 关于文件重定向的帮助。
使用 dlv [command] --help
获取有关特定命令的更多信息。
二、dlv attach
– 连接到已运行的进程并开始调试
-
解释: 此命令将使 Delve 接管已经运行的进程并开始新的调试会话。在退出调试会话时,可以选择让进程继续运行或终止它。
-
使用方式:
dlv attach pid [executable] [flags]
,连接到指定进程进行调试。可提供进程ID,可执行文件路径,以及一些标志参数。 -
导致结果: Delve 接管指定进程,使能够在调试会话中检查、修改和控制该进程的执行。
--continue
: 在启动时继续调试过程。--waitfor
: 等待具有以指定前缀开头的名称的进程。--waitfor-duration
: 等待进程的总时间。--waitfor-interval
: 进程列表检查之间的间隔时间。
-
全局标志:
--accept-multiclient
: 允许headless服务器通过 JSON-RPC 或 DAP 接受多个客户端连接。--allow-non-terminal-interactive
: 允许没有终端作为标准输入、输出和错误的 Delve 交互式会话。--api-version
: 选择 JSON-RPC API 版本。新客户端应使用 v2。可以通过 RPCServer.SetApiVersion 重置。查看文档/api/json-rpc/README.md。(默认值 1)--backend
: 后端选择(参见 ‘dlv help backend’)。(默认值 “default”)--check-go-version
: 如果使用的 Go 版本与 Delve 版本不兼容(太旧或太新),则退出。(默认值 true)--headless
: 仅以headless模式运行调试服务器。服务器将接受 JSON-RPC 或 DAP 客户端连接。--init
: 初始化文件,由终端客户端执行。-l
或--listen
: 调试服务器的监听地址。(默认值 “127.0.0.1:0”)--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。--only-same-user
: 仅允许来自启动此 Delve 实例的相同用户的连接。(默认值 true)
三、dlv connect
– 连接到运行中的headless调试服务器
-
解释: 此命令用于连接到正在运行的headless调试服务器,并使用终端客户端进行交互。
-
使用方式:
dlv connect addr [flags]
,通过指定的地址连接到正在运行的调试服务器。可以提供一些标志参数。 -
导致结果: 与运行中的headless调试服务器建立连接,允许用户通过终端客户端与调试服务器进行交互。
--backend
: 后端选择(参见 ‘dlv help backend’)。(默认值 “default”)--init
: 初始化文件,由终端客户端执行。--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。
-
全局标志:
--backend
: 后端选择(参见 ‘dlv help backend’)。(默认值 “default”)--init
: 初始化文件,由终端客户端执行。--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。
四、dlv core
– 分析核心转储文件
-
解释: 此命令用于分析核心转储文件,仅支持Linux和Windows核心转储。此命令允许使用Delve分析核心转储文件,以了解进程在生成核心转储时的状态。
-
使用方式:
dlv core <executable> <core> [flags]
,打开指定的核心文件和相关的可执行文件,允许检查在生成核心转储时进程的状态。 -
导致结果: Delve会加载指定的核心文件和相关的可执行文件,使能够在核心转储生成时检查进程的状态。
<executable>
: 可执行文件的路径。<core>
: 核心转储文件的路径。
-
全局标志:
--accept-multiclient
: 允许headless服务器通过JSON-RPC或DAP接受多个客户端连接。--allow-non-terminal-interactive
: 允许没有终端作为标准输入、输出和错误的交互式Delve会话。--api-version
: 在headless模式下选择JSON-RPC API版本。新客户端应使用v2。可以通过RPCServer.SetApiVersion重置。查看文档/api/json-rpc/README.md。(默认值 1)--check-go-version
: 如果正在使用的Go版本与Delve版本不兼容(太旧或太新),则退出。(默认值 true)--headless
: 仅以headless模式运行调试服务器。服务器将接受JSON-RPC或DAP客户端连接。--init
: 由终端客户端执行的初始化文件。-l
或--listen
: 调试服务器的监听地址。(默认值 “127.0.0.1:0”)--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。--only-same-user
: 仅允许来自启动此Delve实例的相同用户的连接。(默认值 true)
五、dlv dap
– 启动通过Debug Adaptor Protocol (DAP)通信的headless TCP服务器
-
解释: 此命令用于启动一个headless的TCP服务器,通过Debug Adaptor Protocol (DAP)与DAP客户端通信。
-
使用方式:
dlv dap [flags]
,启动一个headless的TCP服务器,等待DAP客户端连接,并根据客户端的启动配置执行相应操作,如启动已编译的二进制文件、构建并启动、构建并测试、回放rr跟踪、回放核心转储文件或附加到正在运行的进程。 -
导致结果: 服务器处于headless模式,要求DAP客户端(如VS Code)连接并请求启动二进制文件或附加到进程。支持的启动模式包括launch + exec、launch + debug、launch + test、launch + replay、launch + core、attach + local。
--client-addr
: DAP客户端等待DAP服务器拨号的主机:端口。使用此标志使服务器在启动时拨号到指定的主机:端口,开始调试会话。服务器进程将在调试会话结束时退出。
-
全局标志:
--check-go-version
: 如果正在使用的Go版本与Delve版本不兼容(太旧或太新),则退出。(默认值 true)--disable-aslr
: 禁用地址空间随机化。-l
或--listen
: 调试服务器的监听地址。(默认值 “127.0.0.1:0”)--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。--only-same-user
: 仅允许来自启动此Delve实例的相同用户的连接。(默认值 true)
六、dlv debug
– 编译程序并启动/附加调试进程
-
解释: 此命令用于在禁用优化的情况下编译程序,并启动或附加调试进程。
-
使用方式:
dlv debug [package] [flags]
,默认情况下,Delve将编译当前目录中的’main’包,并开始调试。还可以指定一个包名称,Delve将编译该包并开始一个新的调试会话。 -
导致结果: 编译程序并启动/附加到调试进程。
[package]
: 包的名称,如果未指定,默认为’main’包。
-
标志:
--continue
: 在启动时继续调试进程。--output
: 二进制文件的输出路径。--tty
: 用于目标程序的TTY。
-
全局标志:
--accept-multiclient
: 允许headless服务器通过JSON-RPC或DAP接受多个客户端连接。--allow-non-terminal-interactive
: 允许没有终端作为标准输入、输出和错误的交互式Delve会话。--api-version
: 在headless模式下选择JSON-RPC API版本。新客户端应使用v2。可以通过RPCServer.SetApiVersion重置。查看文档/api/json-rpc/README.md。(默认值 1)--backend
: 后端选择(参见 ‘dlv help backend’)。 (默认值 “default”)--build-flags
: 传递给编译器的构建标志,例如:–build-flags=“-tags=integration -mod=vendor -cover -v”。--check-go-version
: 如果正在使用的Go版本与Delve版本不兼容(太旧或太新),则退出。(默认值 true)--disable-aslr
: 禁用地址空间随机化。--headless
: 仅以headless模式运行调试服务器。服务器将接受JSON-RPC或DAP客户端连接。--init
: 由终端客户端执行的初始化文件。-l
或--listen
: 调试服务器的监听地址。(默认值 “127.0.0.1:0”)--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。--only-same-user
: 仅允许来自启动此Delve实例的相同用户的连接。(默认值 true)-r
或--redirect
: 为目标进程指定重定向规则(参见 ‘dlv help redirect’)。--wd
: 运行程序的工作目录。
七、dlv exec
– 执行预编译的二进制文件并开始调试会话
-
解释: 执行预编译的二进制文件并立即附加到它,开始一个新的调试会话。
-
使用方式:
dlv exec <path/to/binary> [flags]
,这个命令会让Delve执行二进制文件,并立即附加到它上面,开始一个新的调试会话。 -
导致结果: 执行预编译的二进制文件并开始调试会话。需要注意,如果二进制文件未禁用优化进行编译,可能会导致难以正确调试。建议在Go 1.10或更高版本上使用
-gcflags="all=-N -l"
编译调试二进制文件,在较早的Go版本上使用-gcflags="-N -l"
。<path/to/binary>
: 二进制文件的路径。
-
标志:
--continue
: 在启动时继续调试进程。--tty
: 用于目标程序的TTY。
-
全局标志:
--accept-multiclient
: 允许headless服务器通过JSON-RPC或DAP接受多个客户端连接。--allow-non-terminal-interactive
: 允许没有终端作为标准输入、输出和错误的交互式Delve会话。--api-version
: 在headless模式下选择JSON-RPC API版本。新客户端应使用v2。可以通过RPCServer.SetApiVersion重置。查看文档/api/json-rpc/README.md。(默认值 1)--backend
: 后端选择(参见 ‘dlv help backend’)。 (默认值 “default”)--check-go-version
: 如果正在使用的Go版本与Delve版本不兼容(太旧或太新),则退出。(默认值 true)--disable-aslr
: 禁用地址空间随机化。--headless
: 仅以headless模式运行调试服务器。服务器将接受JSON-RPC或DAP客户端连接。--init
: 由终端客户端执行的初始化文件。-l
或--listen
: 调试服务器的监听地址。(默认值 “127.0.0.1:0”)--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。--only-same-user
: 仅允许来自启动此Delve实例的相同用户的连接。(默认值 true)-r
或--redirect
: 为目标进程指定重定向规则(参见 ‘dlv help redirect’)。--wd
: 运行程序的工作目录。
八、dlv test
– 编译禁用优化的测试二进制文件并开始调试会话
-
解释: 编译禁用优化的测试二进制文件并立即附加到它,开始一个新的调试会话。
-
使用方式:
dlv test [package] [flags]
,该命令允许在单元测试的上下文中开始新的调试会话。默认情况下,Delve将调试当前目录中的测试。还可以指定包名称,Delve将调试该包中的测试。双破折号--
可用于将参数传递给测试程序。 -
导致结果: 编译禁用优化的测试二进制文件并开始调试会话。测试程序将在调试服务器中运行,允许逐步执行、设置断点等。
[package]
: 包的名称,指定要调试的测试程序所在的包。如果未指定,默认为当前目录中的测试。
-
标志:
--help
或-h
: 显示有关dlv test
命令的帮助信息。--output
: 用于指定二进制文件输出路径的标志,指定测试二进制文件的输出路径。
-
全局标志:
--accept-multiclient
: 允许headless服务器通过JSON-RPC或DAP接受多个客户端连接。--allow-non-terminal-interactive
: 允许没有终端作为标准输入、输出和错误的交互式Delve会话。--api-version
: 在headless模式下选择JSON-RPC API版本。新客户端应使用v2。可以通过RPCServer.SetApiVersion重置。查看文档/api/json-rpc/README.md。(默认值 1)--backend
: 后端选择(参见 ‘dlv help backend’)。 (默认值 “default”)--build-flags
: 传递给编译器的构建标志。例如:–build-flags=“-tags=integration -mod=vendor -cover -v”--check-go-version
: 如果正在使用的Go版本与Delve版本不兼容(太旧或太新),则退出。(默认值 true)--disable-aslr
: 禁用地址空间随机化。--headless
: 仅以headless模式运行调试服务器。服务器将接受JSON-RPC或DAP客户端连接。--init
: 由终端客户端执行的初始化文件。-l
或--listen
: 调试服务器的监听地址。(默认值 “127.0.0.1:0”)--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。--only-same-user
: 仅允许来自启动此Delve实例的相同用户的连接。(默认值 true)-r
或--redirect
: 为目标进程指定重定向规则(参见 ‘dlv help redirect’)。--wd
: 运行程序的工作目录。
九、dlv trace
– 追踪程序执行
-
解释: 追踪程序执行。通过
dlv trace
命令,可以设置跟踪点来了解程序正在执行的函数,输出将打印到 stderr,如果需要只看跟踪操作的输出,可以重定向 stdout。 -
使用方式:
dlv trace [package] regexp [flags]
,该命令设置一个跟踪点(tracepoint)在与提供的正则表达式匹配的每个函数上,并在命中跟踪点时输出信息。这在不想开始整个调试会话,只想知道进程正在执行哪些函数时非常有用。[package]
: 包的名称,指定要追踪的程序所在的包。如果未指定,默认为当前目录中的程序。regexp
: 正则表达式,用于匹配要追踪的函数。
-
标志:
--ebpf
: 使用 eBPF 进行跟踪(实验性)。-e
或--exec
: 要执行和跟踪的二进制文件。--output
: 用于指定二进制文件输出路径的标志,指定跟踪的二进制文件的输出路径。-p
或--pid
: 要附加到的进程 ID。-s
或--stack
: 显示给定深度的堆栈跟踪。(在使用--ebpf
时被忽略)-t
或--test
: 跟踪测试二进制文件。--timestamp
: 在输出中显示时间戳。
-
全局标志:
--backend
: 后端选择(参见 ‘dlv help backend’)。 (默认值 “default”)--build-flags
: 传递给编译器的构建标志。例如:–build-flags=“-tags=integration -mod=vendor -cover -v”--check-go-version
: 如果正在使用的 Go 版本与 Delve 版本不兼容(太旧或太新),则退出。(默认值 true)--disable-aslr
: 禁用地址空间随机化。--log
: 启用调试服务器日志记录。--log-dest
: 将日志写入指定的文件或文件描述符(参见 ‘dlv help log’)。--log-output
: 应该生成调试输出的组件的逗号分隔列表(参见 ‘dlv help log’)。-r
或--redirect
: 为目标进程指定重定向规则(参见 ‘dlv help redirect’)。--wd
: 运行程序的工作目录。
十、dlv version
– 查看dlv版本号
- 解释: 查看dlv版本号。
- 使用方式:
dlv version
。
十一、dlv backend
– Delve 调试器后端选择
- 解释: 这个命令用于选择 Delve 调试器的后端,决定它在不同环境下的执行方式。允许在不同环境下选择 Delve 调试器的后端。
- 使用方式:
dlv backend
,用于指定 Delve 调试器的后端选择。 - 可能值:
default
:在 macOS 上使用 lldb,在其他所有地方使用本地(native)后端。native
:本地后端。lldb
:使用 lldb-server 或 debugserver。rr
:使用 Mozilla rr(https://github.com/mozilla/rr)。
十二、dlv log
– 启用 Delve 调试器日志记录
-
解释: 该命令用于启用 Delve 调试器的日志记录功能。允许根据需要选择性地启用 Delve 调试器的不同组件的日志记录功能,并将日志写入指定的位置,以便更好地跟踪和调试程序执行过程中发生的事件和信息。
-
使用方式: 通过指定
--log
标志并使用--log-output
标志来选择产生日志的组件。 -
可用组件列表:
debugger
:记录调试器命令。gdbwire
:记录与 gdbserial 后端的连接。lldbout
:将 debugserver/lldb 的输出复制到标准输出。debuglineerr
:记录读取.debug_line
文件时的可恢复错误。rpc
:记录所有 RPC 消息。dap
:记录所有 DAP 消息。fncall
:记录函数调用协议。minidump
:记录 minidump 加载信息。stack
:记录堆栈跟踪器的信息。
-
附加选项:
--log-dest
:用于指定日志记录的位置。如果参数是一个数字,则会被解释为文件描述符,否则作为文件路径。该选项还会重定向在headless模式和 DAP 模式下的 “server listening at” 消息。
十三、dlv redirect
– 控制目标进程的标准文件描述符
- 解释: 该命令用于控制目标进程的标准文件描述符。允许控制目标进程的标准文件描述符,以便在调试过程中对输入输出进行必要的重定向操作。
- 使用方式: 使用
-r
和--tty
参数来控制目标进程的标准文件描述符。--tty
参数允许将所有标准描述符重定向到一个终端,终端路径作为--tty
参数的参数。-r
参数的语法为:-r [source:]destination
,其中 source 可以是 ‘stdin’、‘stdout’ 或 ‘stderr’ 中的一个,destination 是文件的路径。如果省略 source,则默认使用 stdin。
- 导致结果: 可以通过该命令控制目标进程的标准文件描述符,从而实现输入输出的重定向。
今天的文章
dl.code调试_golang任务调度框架分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80385.html