我的目标是能够从Atom.io进行远程调试。进入运行dlv调试器的docker容器。这是第一个问题:
更新:1。我在Mac上运行Docker容器,但这不会影响代码签名,因为我在容器中运行,对吗?
更新:2。Codesignig房东,没有帮助。
Error:
1. root@...:/go/src/app# go get github.com/derekparker/delve/cmd/dlv
2. root@...:/go/src/app# dlv debug hello.go
could not launch process: fork/exec ./debug: operation not permitted
Run Code Online (Sandbox Code Playgroud)
然后尝试
1. root@...:/go/src/app# sudo
2. bash: sudo: command not found
Run Code Online (Sandbox Code Playgroud) 标题基本概括了所有内容.
我知道如何设置一个的唯一方法是在程序运行期间或之前 breakpoint main.main
有没有办法可以通过行号来做到这一点breakpoint ./otherfile.go:200?
IDE 是 Visual Studio Code。这是我打开调试器时的日志:
# _/Users/leon/Documents/Projects/GoLang/TutorialLearningGoForWebDevelopment
/usr/local/go/pkg/tool/darwin_amd64/link: /usr/local/go/pkg/tool/darwin_amd64/link: combining dwarf failed: Unknown load command 0x32 (50)
exit status 2
Process exiting with code: 1
Run Code Online (Sandbox Code Playgroud)
去版本:
go version go1.10.3 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
macOS 版本:
Mojave Version 10.14 Beta (18A353d)
Run Code Online (Sandbox Code Playgroud)
钻研版本:
Delve Debugger
Version: 1.0.0
Build: $Id: c98a142125d0b17bb11ec0513bde346229b5f533 $
Run Code Online (Sandbox Code Playgroud)
Visual Studio 代码版本:
Version 1.26.0-insider (1.26.0-insider)
Run Code Online (Sandbox Code Playgroud)
在launch.json几乎是自动生成的,具有端口变化只:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0", …Run Code Online (Sandbox Code Playgroud) 如何强制 Delve in VS Code 使用 root 权限?
我正在尝试调试涉及 gopacket/pcap 的 go 文件:
hndl, err := pcapgo.NewEthernetHandle(ifname)
// err == "couldn't open packet socket: operation not permitted"
Run Code Online (Sandbox Code Playgroud)
使用启动相同的程序sudo不会触发错误。
我尝试了几种方法:
sudo code .会警告不建议这样做。另外,由于环境变量混乱,因此在此模式下使用 dlv 会出现问题。"go.alternateTools"似乎对“dlv”一无所知:Property dlv is not allowed.可能指南中缺少某些内容。.vscode/launch.json允许 sudo 的配置属性。VSC 允许对Python执行此操作,但不能对 Go 执行此操作。有没有什么简单的方法可以使用 root 权限启动调试器?
环境:
我当前的开发设置是一个 docker 文件,它在每次保存时使用CompileDaemon编译代码,并使用Delve进行调试。
目前我几乎可以完成所有工作。唯一的问题是,当我尝试再次启动调试时,该端口已在使用中。
他们是在 docker 容器内通过调试完成实时重新加载的更好方法吗?
Dockerfile:
FROM golang:latest
RUN go get github.com/githubnemo/CompileDaemon && \
go get github.com/go-delve/delve/cmd/dlv
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY ./ ./
EXPOSE 5000 2345
# echo 1 is to block build command
ENTRYPOINT CompileDaemon --build="echo 1" --command="dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient cmd/app/main.go"
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Golang 调试深入构建来容器化我自己的调试版本 Golang 应用程序。\n这是我如何在本地调试我的 Golang 应用程序,它是一个非常简单的 RSS 阅读器。它从我感兴趣的 RSS 提要中检索数据。
\n$on my local terminal$ dlv debug parsedata-xml-fp.go # launch my app with delve\nType 'help' for list of commands.\n(dlv) b main\nCommand failed: Location "main" ambiguous: main.main, runtime.main\xe2\x80\xa6\n(dlv) b main.main\nBreakpoint 1 set at 0x760252 for main.main() ./parsedata-xml-fp.go:50\n(dlv) c\n> main.main() ./parsedata-xml-fp.go:50 (hits goroutine(1):1 total:1) (PC: 0x760252)\n=> 50: func main() {\n 51: // [decode from response.Body]\n 52: url := "https://foreignpolicy.com/feed/"\n 53:\n 54: var URLset Rss\n 55: if xmlBytes, err := getXML(url); err …Run Code Online (Sandbox Code Playgroud) 在 C# 中,执行程序可以使用以下命令检测它是否在调试器中运行:
System.Diagnostics.Debugger.IsAttached
Run Code Online (Sandbox Code Playgroud)
在 Go 中有等价物吗?我有一些超时,我想在我逐步执行代码时将其禁用。谢谢!
我正在使用 GoLand 调试器。
这个问题是关于使用 delve 调试器远程调试 golang 代码。具体来说,如何在不终止远程进程的情况下断开客户端调试器的连接。
我在需要调试的 docker 容器内运行一个进程。该进程在 docker 的入口点通过以下方式启动
dlv debug /go/src/path/to/package --headless --listen=:2345 --log
docker 容器通过以下方式启动
docker run --rm -it -p 2345:2345 my_image:tag
从我的工作站,我通过以下方式连接到 delve 无头服务器
$dlv connect :2345
Type 'help' for list of commands.
(dlv)
Run Code Online (Sandbox Code Playgroud)
此时我会进行一些调试。当我完成后,我希望能够在不终止正在调试的进程的情况下断开与无头服务器的连接。
(dlv) exit
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的命令断开了 delve 客户端与无头服务器的连接,并且还终止了我正在调试的远程进程,并且由于那是 docker 容器的入口点,因此容器停止。我想避免因终止远程进程而断开连接,如何?
我已经查看了 的论点(dlv) exit,但看不到有帮助的论点。
(dlv) help exit
Exit the debugger.
exit [-c]
When connected to a headless instance started with the --accept-multiclient, pass -c to resume the execution of the target process before …Run Code Online (Sandbox Code Playgroud) 我在需要调试的 docker 容器内运行一个进程。该进程在 docker 的入口点 via 启动
dlv debug /go/src/path/to/package --headless --listen=:2345 --log,以便稍后在 VSCode 中启用调试。
docker 容器通过 启动
docker run --rm -it -p 2345:2345 my_image:tag。注意 delve 的端口是暴露的。
在VSCode中我定义launch.json如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach remote",
"type": "go",
"request": "attach",
"mode": "remote",
"port": 2345,
"host": "127.0.0.1",
"apiVersion": 1
}
]
}
Run Code Online (Sandbox Code Playgroud)
虽然不是很清楚,但该 UI 让我相信我现在已连接到远程无头调试器并准备好进行调试。我定义了一个断点,我知道该断点会被我可以发送远程进程的请求击中。我发送该请求,得到结果,并且该断点从未命中,表明我尚未实现远程调试。
我的 VSCode“附加远程”配置有问题吗?我可以进行命令行调试,dlv connect :2345并且实际上可以很好地调试远程进程,这表明无头服务器功能正常。我宁愿在 VSCode 中使用源代码进行调试。