Linux 生成核心转储

Linux 生成核心转储,linux,debian,go,Linux,Debian,Go,我的围棋程序时常崩溃 我尝试了一些方法,以便为该程序生成核心转储: 在系统上定义ulimit时,我尝试了ulimit-c unlimited和ulimit-c 10000,以防万一。在启动我的恐慌计划后,我没有得到核心转储 我还在我的程序中添加了recover()支持,并在系统日志中添加了代码,以防出现死机,但我在系统日志中什么也没有得到 我现在没什么主意了 我一定是忽略了什么,但我没有发现什么,任何帮助都将不胜感激 谢谢!:) 首先,请确保已处理所有错误 对于堆芯转储,您可以参考 当程序崩溃时

我的围棋程序时常崩溃

我尝试了一些方法,以便为该程序生成核心转储:

  • 在系统上定义ulimit时,我尝试了
    ulimit-c unlimited
    ulimit-c 10000
    ,以防万一。在启动我的恐慌计划后,我没有得到核心转储

  • 我还在我的程序中添加了
    recover()
    支持,并在系统日志中添加了代码,以防出现死机,但我在系统日志中什么也没有得到

  • 我现在没什么主意了

    我一定是忽略了什么,但我没有发现什么,任何帮助都将不胜感激

    谢谢!:)

  • 首先,请确保已处理所有错误

  • 对于堆芯转储,您可以参考

  • 当程序崩溃时,可以使用重新启动程序

  • 首先,请确保已处理所有错误

  • 对于堆芯转储,您可以参考

  • 当程序崩溃时,可以使用重新启动程序


  • 请注意,当满足某个集合的条件时,操作系统会生成一个内核转储。这些条件是相当低级的-比如试图访问未映射的内存或试图执行CPU不知道的操作码等。在POSIX操作系统(如Linux)下,当某个进程执行这些操作时,会向其发送一个适当的消息,其中一些如果不由该进程处理,具有生成核心转储的默认操作,如果设置未禁止,则由操作系统执行该操作

    现在请注意,这种机制在尽可能低的级别(机器代码)上处理进程,但Go编译器生成的二进制文件比C编译器(或汇编程序)生成的二进制文件更高级别,这意味着Go编译器生成的进程中的某些错误由Go运行时而不是操作系统处理。例如,C编译器生成的进程中典型的空指针解引用通常会导致向进程发送SIGSEGV信号,然后通常会导致尝试转储进程的内核并终止它。相反,当这发生在由Go编译器编译的进程中时,Go运行时会启动并崩溃,为调试目的生成一个很好的堆栈跟踪

    考虑到这些事实,我将尝试这样做:

  • 将您的程序包装在一个shell脚本中,该脚本首先放宽核心转储的限制(但请参见下文),然后运行您的程序,并将其标准错误流重定向到一个文件(或通过管道传输到
    记录器
    二进制文件等)
  • 用户可以调整的限制有一个层次结构:有软限制和硬限制-有关解释,请参阅和。因此,请尝试检查您的系统没有将核心转储大小设置为硬限制的0,因为这可以解释为什么您尝试提高此限制没有效果
  • 至少在我的Debian系统上,当一个程序由于SIGSEGV而死机时,这个事实会被内核记录下来,并在syslog日志文件中可见,所以请尝试将它们变灰以获取提示

  • 请注意,当满足某个集合的条件时,操作系统会生成一个内核转储。这些条件是相当低级的-比如试图访问未映射的内存或试图执行CPU不知道的操作码等。在POSIX操作系统(如Linux)下,当某个进程执行这些操作时,会向其发送一个适当的消息,其中一些如果不由该进程处理,具有生成核心转储的默认操作,如果设置未禁止,则由操作系统执行该操作

    现在请注意,这种机制在尽可能低的级别(机器代码)上处理进程,但Go编译器生成的二进制文件比C编译器(或汇编程序)生成的二进制文件更高级别,这意味着Go编译器生成的进程中的某些错误由Go运行时而不是操作系统处理。例如,C编译器生成的进程中典型的空指针解引用通常会导致向进程发送SIGSEGV信号,然后通常会导致尝试转储进程的内核并终止它。相反,当这发生在由Go编译器编译的进程中时,Go运行时会启动并崩溃,为调试目的生成一个很好的堆栈跟踪

    考虑到这些事实,我将尝试这样做:

  • 将您的程序包装在一个shell脚本中,该脚本首先放宽核心转储的限制(但请参见下文),然后运行您的程序,并将其标准错误流重定向到一个文件(或通过管道传输到
    记录器
    二进制文件等)
  • 用户可以调整的限制有一个层次结构:有软限制和硬限制-有关解释,请参阅和。因此,请尝试检查您的系统没有将核心转储大小设置为硬限制的0,因为这可以解释为什么您尝试提高此限制没有效果
  • 至少在我的Debian系统上,当一个程序由于SIGSEGV而死机时,这个事实会被内核记录下来,并在syslog日志文件中可见,所以请尝试将它们变灰以获取提示

  • 您可能还需要设置GOTRACEBACK env变量。您可能还需要设置GOTRACEBACK env变量。