登录
首页 >  Golang >  Go问答

如何查看 GoLand 调试器是否在程序中运行?

来源:Golang技术栈

时间:2023-04-05 14:10:08 130浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何查看 GoLand 调试器是否在程序中运行?》,以下内容将会涉及到golang,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

在 C# 中,执行程序可以使用以下方法检测它是否在调试器中运行:

System.Diagnostics.Debugger.IsAttached

Go中是否有等价物?我有一些超时,我希望在单步执行代码时禁用这些超时。谢谢!

我正在使用 GoLand 调试器。

正确答案

如果您假设使用的调试器是 Delve,您可以检查 Delve 进程。至少有两种情况需要考虑(也许更多)。

  1. Delve 启动了您的进程。在这种情况下,当您调用os.Getppid()获取父进程的 pid 时,该进程将是 Delve。
  2. Delve 没有启动您的流程,但后来确实附加了它。在这种情况下,您需要查找所有正在运行的 Delve 进程,查看它们的命令行,并查看是否使用包含“attach”的命令行启动了任何进程,调用的结果在哪里os.Getpid()。这依赖于假设您没有找到旧的 Delve,它使用恰好与您匹配的旧 PID 运行。(我忘记了操作系统重用 PID 的规则)。

注意1和2使用的os函数是不同的。一个获取父 PID,另一个获取您的 PID。

执行 1 的一些非常基本的代码如下所示:

func isLaunchedByDebugger() bool {
    // gops executable must be in the path. See https://github.com/google/gops
    gopsOut, err := exec.Command("gops", strconv.Itoa(os.Getppid())).Output()
    if err == nil && strings.Contains(string(gopsOut), "\\dlv.exe") {
        // our parent process is (probably) the Delve debugger
        return true
    }
    return false
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>