如何在Golang dlv中重新加载源文件

时间:2018-08-19 14:41:08

标签: go

我正在使用dlv调试golang源代码。修改源代码后,是否有任何命令可以重新加载程序?我已经在网上搜索了dlv文档,但没有找到有关该操作的任何信息。

任何帮助将不胜感激。

环境:centos

2 个答案:

答案 0 :(得分:1)

Delve当前无法在保持断点和跟踪等状态的同时重新加载正在运行的已编译代码。您可能要做的最好的事情是在Delve中使用“ source”命令。例如,如果您将一个名为debug.txt的文件放在本地目录中,则可以添加:

break foo.go:171
on 1 print myVar

..然后返回dlv debug

$ dlv debug
Type 'help' for list of commands.
(dlv) source debug.txt
Breakpoint 1 set at 0x1b0f5e5 for /path/to/foo.MyFunction() ./foo.go:171
(dlv)

已配置的断点已加载。

这不是一个完美的解决方案,我想念gdb的行为,所以我创建了一个GitHub问题来开始讨论:https://github.com/go-delve/delve/issues/1551

答案 1 :(得分:0)

~~猜你正在寻找像这样的实时代码重装~~

~~ https://github.com/codegangsta/gin ~~

  • 1,如果您希望在不退出vim的情况下进行调试,则: :new | 0read ! dlv debug #可以。

  • 2如果希望不断加载dlv模式,则可以将tmux与拆分窗格一起使用。一个窗格包含vim,您的文件已打开,另一个窗格正在运行dlv。 在vim中(在窗格中)更改文件时,delve(在配套窗格中)会重新加载此文件以进行调试

  • 3如果只想在保存文件时运行调试,请在第一个命令前加上autocmd BufWritePre Filetype go并将其添加到virmc中。

如果您在每次更改时都在寻找一些可重新生成可执行文件的命令,我认为您的位置错误,调试并不意味着可以重新生成可执行文件。调试完成后,您可以检查您的应用程序并运行命令(go build的某些变体或调用它的包装器)。生成可执行文件。