Golang Go语言中 GoLand Debug 时如何回到之前执行的地方

Golang Go语言中 GoLand Debug 时如何回到之前执行的地方

如题,之前用 IDEA 的时候,可以用 Drop Frame,直接回到上一个调用栈。

GoLand 貌似没发现这样的功能,感觉 Debug 的时候,貌似没有 Java 调试起来方便啊。

有大佬解决过类似的问题吗

12 回复

没太懂,GoLand 跟 idea 一个模子刻出来的,debug 哪里有 帧 和变量两个页签啊

更多关于Golang Go语言中 GoLand Debug 时如何回到之前执行的地方的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不知道是不是孕妇效应,最近看讨论 golang 的越来越多了

什么是孕妇效应

https://www.jetbrains.com/help/go/debugging-with-mozilla-rr.html

另外这个功能在是跟实现和系统相关的,在虚拟机语言里只需要做 trace 记录就可以了,比如 Python 就可以实现类似的功能,但是 JNI 这种就用不了你提到的这种功能

同问什么是孕妇效应


aHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS8lRTUlQUQlOTUlRTUlQTYlODclRTYlOTUlODglRTUlQkElOTQ=

Go 确实越来越火,如果看见讨论的是 Ruby 那就是孕妇效应。

#5
#3

如果自己怀孕了就会发现 /感觉周围都是孕妇, 这就是所谓的孕妇效验

IDEA 在 Debug 的时候,进入一个函数之后,可以对栈列表中的调用栈,选择 Drop Frame,然后回到函数一开始调用的地方。GoLand 貌似没有提供。

这应该不是 goland 的问题,java 是运行在 jvm 里面的,go 是编译成二进制代码的,我觉得应该是 go 语言 debug 就不能实现回跳这种功能

这功能理论上不依赖 go 实现。C/C++是有的,叫 rr 。不过实现调试的时间穿越功能对性能已经并发的影响很大,如果语言本身没有开洞,怕是不好搞。

在GoLand中进行Debug时,如果想要回到之前执行的地方,实际上是指要控制调试器在程序的执行流程中进行回溯或重新执行某些步骤。不过,GoLand的调试器并不直接支持“回到之前执行的地方”这一操作,因为调试器通常是基于当前程序状态进行操作的。但你可以通过一些调试技巧来达到类似的效果:

  1. 设置断点

    • 在你想要回溯到的代码位置之前设置一个断点。这样,当程序执行到这个断点时,会暂停下来,你可以检查变量的状态、执行单步操作等。
  2. 单步执行

    • 使用调试器提供的单步执行功能(Step Over、Step Into、Step Out),你可以逐行或逐函数地执行代码,从而控制程序的执行流程。
  3. 重新运行调试

    • 如果上述方法无法满足需求,你可以考虑重新运行调试会话。在重新运行之前,确保你的断点设置正确,并且你清楚程序的执行流程。
  4. 利用调试器的回溯功能

    • 在某些IDE中,调试器可能提供调用堆栈(Call Stack)的查看功能,这可以帮助你了解程序是如何执行到当前位置的。不过,请注意,GoLand的调试器可能并不直接支持回到之前的调用堆栈层。

总之,虽然GoLand的调试器不直接支持“回到之前执行的地方”的操作,但你可以通过设置断点、单步执行和重新运行调试等方法来控制程序的执行流程,并达到类似的效果。

回到顶部