Linux 生成核心转储
我的围棋程序时常崩溃 我尝试了一些方法,以便为该程序生成核心转储:Linux 生成核心转储,linux,debian,go,Linux,Debian,Go,我的围棋程序时常崩溃 我尝试了一些方法,以便为该程序生成核心转储: 在系统上定义ulimit时,我尝试了ulimit-c unlimited和ulimit-c 10000,以防万一。在启动我的恐慌计划后,我没有得到核心转储 我还在我的程序中添加了recover()支持,并在系统日志中添加了代码,以防出现死机,但我在系统日志中什么也没有得到 我现在没什么主意了 我一定是忽略了什么,但我没有发现什么,任何帮助都将不胜感激 谢谢!:) 首先,请确保已处理所有错误 对于堆芯转储,您可以参考 当程序崩溃时
ulimit-c unlimited
和ulimit-c 10000
,以防万一。在启动我的恐慌计划后,我没有得到核心转储recover()
支持,并在系统日志中添加了代码,以防出现死机,但我在系统日志中什么也没有得到请注意,当满足某个集合的条件时,操作系统会生成一个内核转储。这些条件是相当低级的-比如试图访问未映射的内存或试图执行CPU不知道的操作码等。在POSIX操作系统(如Linux)下,当某个进程执行这些操作时,会向其发送一个适当的消息,其中一些如果不由该进程处理,具有生成核心转储的默认操作,如果设置未禁止,则由操作系统执行该操作 现在请注意,这种机制在尽可能低的级别(机器代码)上处理进程,但Go编译器生成的二进制文件比C编译器(或汇编程序)生成的二进制文件更高级别,这意味着Go编译器生成的进程中的某些错误由Go运行时而不是操作系统处理。例如,C编译器生成的进程中典型的空指针解引用通常会导致向进程发送SIGSEGV信号,然后通常会导致尝试转储进程的内核并终止它。相反,当这发生在由Go编译器编译的进程中时,Go运行时会启动并崩溃,为调试目的生成一个很好的堆栈跟踪 考虑到这些事实,我将尝试这样做:
记录器
二进制文件等)请注意,当满足某个集合的条件时,操作系统会生成一个内核转储。这些条件是相当低级的-比如试图访问未映射的内存或试图执行CPU不知道的操作码等。在POSIX操作系统(如Linux)下,当某个进程执行这些操作时,会向其发送一个适当的消息,其中一些如果不由该进程处理,具有生成核心转储的默认操作,如果设置未禁止,则由操作系统执行该操作 现在请注意,这种机制在尽可能低的级别(机器代码)上处理进程,但Go编译器生成的二进制文件比C编译器(或汇编程序)生成的二进制文件更高级别,这意味着Go编译器生成的进程中的某些错误由Go运行时而不是操作系统处理。例如,C编译器生成的进程中典型的空指针解引用通常会导致向进程发送SIGSEGV信号,然后通常会导致尝试转储进程的内核并终止它。相反,当这发生在由Go编译器编译的进程中时,Go运行时会启动并崩溃,为调试目的生成一个很好的堆栈跟踪 考虑到这些事实,我将尝试这样做:
记录器
二进制文件等)您可能还需要设置GOTRACEBACK env变量。您可能还需要设置GOTRACEBACK env变量。