google-app-engine - 如何为 Golang 和 AppEngine 设置 VScode 调试 session ?

标签 google-app-engine go visual-studio-code delve

VScodeDebugGoAppEngine

展示如何设置 VS Code 以使用 Visual Studio(又名 VScode)调试 Golang App Engine 代码的 Hello World 教程

这是使用 AppEngine 文档中的 Helloworld 代码:

go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git

在运行 osX 10.13.3 的 Mac 上。

我已经测试了代码并且服务器在本地工作。我正在尝试弄清楚如何使用调试器输入代码,以便学习如何在其他项目中使用调试器。

这些是我能找到的在 GAE 中使用 VScode 的最佳说明,但它们似乎已经过时,基于对 Golang 的更新(例如切换到 Gcloud、-go_debugging 标志和更改目录结构):
https://medium.com/@dbenque/debugging-golang-appengine-module-with-visual-studio-code-85b3aa59e0f

这是我采取的步骤:

设置环境

  • 添加到 .bash_profile

    export BASEFOLDER="/Users/Bryan/google-cloud-sdk/" . 
    export GOROOT="/usr/local/go" # this shoudln't have to be set with current Version, doing it to follow the tutorial . 
    

我如何尝试让调试器运行:

启动本地服务器。

dev_appserver.py --go_debugging=true app.yaml

将本地二进制文件附加到 Delve

 ps aux | grep _go_app 

dlv attach <#using the PID from the server binary>

Delve 成功附加到二进制文件。

当我启动调试 session 时,蓝色进度条从未停止水平扫描。

VARIABLE 侧边栏永远不会填充 hello.go 中的变量

断点设置在 hello.go: line 21

Debug REPL 终端显示:

Verbose logs are written to:  
/var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/vscode-go-debug.txt  
16:02:31, 2018-4-5  
InitializeRequest  
InitializeResponse  
Using GOPATH: /Users/Bryan/go  
fmt.Print(u)  
Please start a debug session to evaluate  

这是 launch.json 配置:

{
    "version": "0.2.0",  
    "configurations": [   
    {
        "name": "Launch",
        "type": "go",
        "request": "launch",
        "mode": "debug",
        "remotePath": "",
        //"port": 1234,  
        "port": 2345   // docs say port should match assigned port headless server, https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code#remote-debugging
                         // this creates bind error
        "host": "127.0.0.1",
        "program": "${workspaceFolder}/hello.go",
        "env": {},
        "args": [],
        "showLog": true,
        "trace": true,
    }
    ]
}

这是我安装的版本:

go version go1.10 darwin/amd64  
$ gcloud version . 
Google Cloud SDK 197.0.0
app-engine-go 
app-engine-python 1.9.68
bq 2.0.31
core 2018.04.06
gsutil 4.30

VS code extension:
Go 0.6.78

编辑###########################

$ lsof -n -i :8080
Bryan@Bryans-MacBook-Pro Thu Apr 12 17:02:04 ~ 
$ lsof -n -i :2345

Bryan@Bryans-MacBook-Pro Thu Apr 12 17:03:34 ~ 
$ ps aux | grep _go_app
Bryan             7433   0.0  0.0  2434840    800 s000  S+    5:03PM   0:00.00 grep _go_app
Bryan             7426   0.0  0.0 556603172   3896 s002  S+    5:02PM   0:00.01 /var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmp8GWk1gappengine-go-bin/_go_app

Bryan@Bryans-MacBook-Pro Thu Apr 12 17:03:52 ~ 
$ dlv attach --headless -l "localhost:2345" 7426 /var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmp8GWk1gappengine-go-bin/_go_app
API server listening at: 127.0.0.1:2345

当我启动调试器时,REPL 显示:

Verbose logs are written to:
/var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/vscode-go-debug.txt
couldn't start listener: listen tcp 127.0.0.1:2345: bind: address already in use
Process exiting with code: 1

最佳答案

VS Code 永远不会附加到 Delve,因为它正在等待连接到位于 127.0.0.1:2345 的远程 Delve 服务器。如果您在 headless 模式下dlv attach,在正确的地址上监听,您应该能够连接。

以下步骤描述了如何调试使用 dev_appserver.py 运行的 Go App Engine 应用程序,而无需其他工具/帮助程序。但是,当您对 Go 代码进行更改时,dev_appserver.py 会重新编译并重新启动应用程序,更改 PID Delve 需要调试。 http://github.com/dbenque/delveAppengine可以帮助 Delve 坚持正确的流程。见 here教程。

  1. 安装VS Code Go extension .
  2. go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git
  3. cd $GOPATH/src/src/github.com/GoogleCloudPlatform/golang-samples/appengine/helloworld

    注意:如果你的GOPATH有多个入口,cdgo get下载到的目录。

  4. 启动 App Engine 开发服务器:

    dev_appserver.py --go_debugging=true app.yaml

  5. 访问 http://localhost:8080以确保服务器正在运行。
  6. 查找Go进程的PID:

    ps 辅助 | grep _go_app

  7. 启动 Delve 服务器(选择系统上可用的任何端口):

    dlv --headless -l "localhost:2345"attach $GO_APP_PID

  8. 打开 VS Code 调试选项卡(在 macOS 上为⇧⌘D,在 Windows 和 Linux 上为 Ctrl+Shift+D)。
  9. 通过单击齿轮并选择任何条目来创建新的启动配置(参见官方文档 here)。
  10. 创建一个“Go: Connect to server”条目:create config dropdown

    注意:这只是一个模板 - 您可以稍后对其进行编辑。

  11. 自定义配置以指向您在启动 Delve 时指定的端口。这是我的完整配置:

    {
        "name": "Launch",
        "type": "go",
        "request": "launch",
        "mode": "debug",
        "remotePath": "",
        "port": 2345,
        "host": "127.0.0.1",
        "program": "${fileDirname}",
        "env": {},
        "args": [],
        "showLog": true
    }
    
  12. 根据需要添加断点并访问 http://localhost:8080再次。到达断点时应停止执行,变量应列在 VS Code 的变量部分中,调用堆栈应位于调用堆栈部分。

有关在 VS Code(不与 App Engine 一起运行)中调试 Go 代码的一般帮助,请参阅 https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code .

关于google-app-engine - 如何为 Golang 和 AppEngine 设置 VScode 调试 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329710/

相关文章:

python - 什么会导致 Gdata Python 客户端在 appengine 中调用 YouTubeVideoQuery 时失败?

java - 尽管代码执行成功,但回滚不适用于 GAE 中使用 Jdo 的事务

python - 在同一请求处理程序下定义 post 和 get 方法

mysql - 在 Go 中使用查询参数获取记录

visual-studio-code - 寻找用于 i18n 资源包编辑的 visual studio 代码扩展

html - 如何在 visual studio 代码中有效地删除许多 HTML div + 结束标记?

python - 使用 get_current_user() 方法时产生此 python AttributeError 的原因是什么?

sql - golang 中的 ISO 日期格式

go - 在 Go 中创建具有未导出子结构的结构实例

python - 在 VS Code python 终端中运行 python 时遇到问题