【问题标题】:Remote debug Gogland halting远程调试 Gogland 停止
【发布时间】:2017-12-27 13:05:27
【问题描述】:

我需要使用 Delve 在 Gogland 中进行远程调试的帮助。

我尝试使用 IDE Goglang (1.0 EAP) 和 dlv 链接在远程服务器上调试我的应用程序:https://github.com/derekparker/delve/

安装并尝试远程调试简单程序:

package main

import "fmt"

func main() {
    fmt.Println("hello world")
    for i:=uint(0); i< 10; i++{
        fmt.Println(i)
    }
}

首先,在远程主机上启动 dlv(控制台输出):

$ dlv debug --headless --listen=:2345 --log --api-version=2
API server listening at: [::]:2345

然后,在 IDE 中开始远程调试:

从远程主机控制台输出:

2017/07/20 17:23:24 debugger.go:504: continuing
2017/07/20 17:23:24 debugger.go:493: halting
2017/07/20 17:23:24 debugger.go:347: created breakpoint: &api.Breakpoint{ID:1, Name:"", Addr:0x47bb52, File:"/....../hello/hello.go", Line:6, FunctionName:"main.main", Cond:"", Tracepoint:false, Goroutine:false, Stacktrace:0, Variables:[]string(nil), LoadArgs:(*api.LoadConfig)(nil), LoadLocals:(*api.LoadConfig)(nil), HitCount:map[string]uint64{}, TotalHitCount:0x0}
2017/07/20 17:23:24 debugger.go:504: continuing
2017/07/20 17:23:28 debugger.go:516: nexting
hello world
2017/07/20 17:23:28 debugger.go:516: nexting
2017/07/20 17:23:29 debugger.go:516: nexting
0
2017/07/20 17:23:29 debugger.go:516: nexting
02017/07/20 17:23:29 debugger.go:516: nexting
2017/07/20 17:23:29 debugger.go:516: nexting
1
2017/07/20 17:23:29 debugger.go:516: nexting
12017/07/20 17:23:30 debugger.go:516: nexting
2017/07/20 17:23:30 debugger.go:516: nexting
2
2017/07/20 17:23:30 debugger.go:516: nexting
42017/07/20 17:23:30 debugger.go:516: nexting
2017/07/20 17:23:30 debugger.go:516: nexting
3
2017/07/20 17:23:30 debugger.go:516: nexting
92017/07/20 17:23:31 debugger.go:516: nexting
2017/07/20 17:23:31 debugger.go:516: nexting
4
2017/07/20 17:23:31 debugger.go:516: nexting
162017/07/20 17:23:31 debugger.go:516: nexting
2017/07/20 17:23:31 debugger.go:516: nexting
5
2017/07/20 17:23:32 debugger.go:516: nexting
252017/07/20 17:23:32 debugger.go:516: nexting
2017/07/20 17:23:32 debugger.go:516: nexting
6
2017/07/20 17:23:32 debugger.go:516: nexting
362017/07/20 17:23:32 debugger.go:516: nexting
2017/07/20 17:23:32 debugger.go:516: nexting
7
2017/07/20 17:23:33 debugger.go:516: nexting
492017/07/20 17:23:33 debugger.go:516: nexting
2017/07/20 17:23:33 debugger.go:516: nexting
8
2017/07/20 17:23:34 debugger.go:516: nexting
642017/07/20 17:23:34 debugger.go:516: nexting
2017/07/20 17:23:34 debugger.go:516: nexting
9
2017/07/20 17:23:34 debugger.go:516: nexting
812017/07/20 17:23:34 debugger.go:516: nexting
2017/07/20 17:23:35 debugger.go:516: nexting
2017/07/20 17:23:35 debugger.go:516: nexting

一切正常(断点、F7、F8 等)

然后我尝试调试我的APP:

dlv debug --headless --listen=:2345 --log --api-version=2 -- --v --console
2017/07/20 17:26:51 debugger.go:97: launching process with args: [/home/...../debug --v --console]
API server listening at: [::]:2345

IDE 启动

输出:

2017/07/20 17:26:55 debugger.go:493: halting
2017/07/20 17:26:55 debugger.go:347: created breakpoint: &api.Breakpoint{ID:1, Name:"", Addr:0x687a73, File:"/home/..........go", Line:136, FunctionName:"main.main", Cond:"", Tracepoint:false, Goroutine:false, Stacktrace:0, Variables:[]string(nil), LoadArgs:(*api.LoadConfig)(nil), LoadLocals:(*api.LoadConfig)(nil), HitCount:map[string]uint64{}, TotalHitCount:0x0}
2017/07/20 17:26:55 debugger.go:347: created breakpoint: &api.Breakpoint{ID:2, Name:"", Addr:0x6869b2, File:"/home/..........go", Line:66, FunctionName:"main.main", Cond:"", Tracepoint:false, Goroutine:false, Stacktrace:0, Variables:[]string(nil), LoadArgs:(*api.LoadConfig)(nil), LoadLocals:(*api.LoadConfig)(nil), HitCount:map[string]uint64{}, TotalHitCount:0x0}
2017/07/20 17:26:55 debugger.go:504: continuing
2017/07/20 17:26:55 debugger.go:347: created breakpoint: &api.Breakpoint{ID:3, Name:"", Addr:0x687d33, File:"/home/........go", Line:143, FunctionName:"main.main", Cond:"", Tracepoint:false, Goroutine:false, Stacktrace:0, Variables:[]string(nil), LoadArgs:(*api.LoadConfig)(nil), LoadLocals:(*api.LoadConfig)(nil), HitCount:map[string]uint64{}, TotalHitCount:0x0}
2017/07/20 17:26:55 debugger.go:504: continuing
2017/07/20 17:26:57 debugger.go:516: nexting

IDE 调试不起作用(挂起)。如果我不使用断点,应用程序会像往常一样启动和运行 (RUN)。

我认为这条线是我的问题的原因:

2017/07/20 17:26:45 debugger.go:493: 停止

为什么会出现??可能是我的实用程序结构复杂(主包分为几个文件,当然还有外部插件包等)还是别的什么?

但是(!最有趣的!)是,如果您不是通过 IDE 而是通过控制台加入远程服务器,那么调试可以在一个简单的示例中进行,并且在我的实用程序的情况下:

dlv connect HOSTNAME:2345
Type 'help' for list of commands.
(dlv) b ********.go:137
Breakpoint 1 set at 0x687a86 for main.main() /home/*************.go:137
(dlv) c
> main.main() /home/***************************.go:137 (hits goroutine(1):1 total:1) (PC: 0x687a86)
(dlv) n

输出:

$ dlv debug --headless --listen=:2345 --log --api-version=2 -- --v --console
2017/07/20 17:37:37 debugger.go:97: launching process with args: [/home/*****************/debug --v --console]
API server listening at: [::]:2345
2017/07/20 17:38:27 debugger.go:347: created breakpoint: &api.Breakpoint{ID:1, Name:"", Addr:0x687a86, File:"/home/*******************.go", Line:137, FunctionName:"main.main", Cond:"", Tracepoint:false, Goroutine:false, Stacktrace:0, Variables:[]string(nil), LoadArgs:(*api.LoadConfig)(nil), LoadLocals:(*api.LoadConfig)(nil), HitCount:map[string]uint64{}, TotalHitCount:0x0}
2017/07/20 17:38:35 debugger.go:504: continuing
2017/07/20 17:38:39 debugger.go:516: nexting

那些。怀疑是 IDE 出错了,或者我做错了什么:)。

我也尝试使用 dlv exec(已经构建应用程序)和其他命令进行调试。

感谢您花时间回答这个问题,我真的希望得到帮助。

附:我也很高兴知道您还可以使用什么来远程调试 GO 应用程序。

附言我尝试在 Atom.io 和 VS 代码中进行远程调试 在 Atom 中,仅使用 dlv 进行语言环境调试。

在 VS 代码中,本地调试器通过 dlv + 远程调试器工作,但断点不起作用!那些。 VS Code 也不是一个选项。 配置 VS 代码(launch.json)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "REMOTE",
            "type": "go",
            "request": "launch",
            "mode": "remote",
            "remotePath": "{workspaceRoot}",
            "port": 2345,
            "host": "REMOTE_HOST_NAME",
            "program":  "${workspaceRoot}", //"${fileDirname}",
            "env": {},
            "args": ["--v", "--console"],
            "showLog": true
        }
    ]
}

【问题讨论】:

  • 对于 Gogland,请在帮助 | 中添加“#com.goide.dlv.DlvVm”(不带引号)调试日志设置...然后尝试调试应用程序并在此处添加日志。您可以通过帮助 | 找到日志。显示登录...并查看idea.log。或者,您可以在跟踪器上打开问题:youtrack.jetbrains.com/issues/Go 并在那里上传日志
  • @dlsniper ,来自 IDE 的日志文件:s000.tinyupload.com/?file_id=03959827677220728410
  • 据我所知,delve 仅存在该过程,仅此而已。您正在运行最新的 Go (1.8.3) 吗?被调试进程的宿主是什么?你如何构建/启动调试的应用程序?我不明白这个简单的应用程序是否有效?如果可以,如果不可以,您可以从 IDE 发布完整的日志吗?如果实际的应用程序不起作用,可能还有其他原因,但是没有办法在样本中重现它,我对此无能为力。可悲的是,这类事情不适合在 StackOverflow 上解决。
  • 简单的应用程序工作(远程调试)。但是我的应用程序无法运行,没有任何错误消息就停止了。
  • 嗯,这可能是 IDE、调试器或 Go 中的错误。没有办法重现它,我没有任何神奇的方法来解决它。我问了你一堆问题,你一个都没回答。想象一下,你必须理解这个问题,而我们的角色将被调换。您将如何识别问题?

标签: debugging go remote-debugging delve goland


【解决方案1】:

问题是基于 IDE 的。在版本中解决: 内部版本:EAP 12、172.3757.46 发布时间:2017 年 8 月 11 日

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多