- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要debugging details .它目前不接受答案。
想改进这个问题?将问题更新为 on-topic对于堆栈溢出。
1年前关闭。
Improve this question
我在工作桌面上运行了好几天的几个进程。今天早上,所有这些过程几乎都停止了工作。经过一番调试我发现在执行time.Sleep
之后,执行流程就会卡在那里,永远不会醒来。因此,当我团队中的每个人都吓坏了时,我刚刚重新启动了我的 Windows 10 PC,人们认为这是一次绝望的重新启动。我想幸运的是,重启后问题就消失了。
我想知道是否有人以前经历过这种情况或知道可能是什么原因?我在另一篇文章中读到 time.Sleep
基本上通过计算操作系统中的绝对时间来安排执行恢复的时间,但是AFAIK日期/时间设置从未改变。
我意识到这可能很难诊断,但我从未在非 Windows 机器上遇到过这个问题。不用说我讨厌 Windows 并且对 Unix 有偏见,但我保证如果有人能就这个 bug 给我一些合理的解释,我会给 Windows 一个机会。
最佳答案
(这不是一个答案——原因如下——而是一些提示。)
这个问题缺乏关键的背景。
桌面是否进入休眠(或休眠)并被唤醒 - 所以您希望进程从它们停止的地方继续?
您确定相关的 goroutine 卡在 time.Sleep
中吗?而不是别的东西?
最后一个问题是最有趣的,但它是无法回答的。
为此,您需要使用一些调试手段来武装您的长期运行的进程。
以粗略的方式工作但没有大惊小怪的最简单方法是以一种有趣的方式终止您的进程:发送SIGQUIT
信号和 Go 运行时将使进程崩溃——将事件 goroutine 的堆栈跟踪转储到进程'stderr
.
(当然,这意味着您没有在进程代码中捕获此信号。)
Windows没有信号,但是Ctrl-Break should work就像 Unix 终端中的 Ctrl-\一样,它通常发送 SIGQUIT
到前台进程。
可以通过调整 GOTRACEBACK
来增强这种方法。环境变量——引用 the docs :
The
GOTRACEBACK
variable controls the amount of output generated when a Go program fails due to an unrecovered panic or an unexpected runtime condition. By default, a failure prints a stack trace for the current goroutine, eliding functions internal to the run-time system, and then exits with exit code 2. The failure prints stack traces for all goroutines if there is no current goroutine or the failure is internal to the run-time.GOTRACEBACK=none
omits the goroutine stack traces entirely.GOTRACEBACK=single
(the default) behaves as described above.GOTRACEBACK=all
adds stack traces for all user-created goroutines.GOTRACEBACK=system
is like “all” but adds stack frames for run-time functions and shows goroutines created internally by the run-time.GOTRACEBACK=crash
is like “system” but crashes in an operating system-specific manner instead of exiting. For example, on Unix systems, the crash raisesSIGABRT
to trigger a core dump. For historical reasons, theGOTRACEBACK
settings 0, 1, and 2 are synonyms for none, all, and system, respectively. Theruntime/debug
package'sSetTraceback
function allows increasing the amount of output at run time, but it cannot reduce the amount below that specified by the environment variable. See https://golang.org/pkg/runtime/debug/#SetTraceback.
GOTRACEBACK=crash
运行你的进程,您不仅可以收集堆栈跟踪信息,还可以收集转储文件(在当今典型的基于 Linux 的系统上,这也需要在
ulimit -c unlimited
下运行)。
关于go - 时间.睡不醒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61886821/
我是一名优秀的程序员,十分优秀!