Debugging 当进程在后台运行时,不会生成CoreDump

Debugging 当进程在后台运行时,不会生成CoreDump,debugging,gdb,Debugging,Gdb,我的程序是用C/C++编写的,并使用-ggdb标志编译。并希望看到核心文件正在生成 我从下面的脚本中调出程序 #!/bin/sh # # Starts the application. # NAME=my_app test -x /usr/bin/my_app || exit 0 start() { echo -n "Starting my app " $NAME > /dev/null 2>&1 & sysctl -

我的程序是用C/C++编写的,并使用-ggdb标志编译。并希望看到核心文件正在生成

我从下面的脚本中调出程序

#!/bin/sh
#
# Starts the application.
#
NAME=my_app
test -x /usr/bin/my_app || exit 0

start() {
        echo -n "Starting my app "
        $NAME > /dev/null 2>&1 &
        sysctl -w kernel.core_pattern='/var/core/%e.%p.%h.%t.core'
        ulimit -c unlimited
        echo "OK"
}
为了测试,我添加了下面的崩溃声明

  char z[100];
  std::strncpy(z, NULL, 100);
当我的应用程序从shell(bash)运行时,甚至当它在后台使用“&”运行时,我可以生成corefiles但是当它从上面的脚本中打开时,不会生成核心文件。

我做错了什么?或者有没有其他办法来解决这个问题? 谢谢

但是当它从上面的脚本中打开时,不会生成corefiles

如果在运行脚本之前将
ulimit-c
设置为
unlimited
,则应用程序可能会生成一个核心转储

您的脚本有3个功能:

  • 在后台运行应用程序
  • 设定核心模式
  • 设置
    ulimit-c unlimited
  • 请注意,步骤3完全没有意义:它只会影响设置新限制后创建的进程(在脚本中,这只是
    回显“OK”

    您要做的是执行步骤2、3和1。当按该顺序执行时,
    ulimit-c unlimited
    实际上会影响您的应用程序(它在创建当前shell时继承了该限制)

    但是当它从上面的脚本中打开时,不会生成corefiles

    如果在运行脚本之前将
    ulimit-c
    设置为
    unlimited
    ,则应用程序可能会生成一个核心转储

    您的脚本有3个功能:

  • 在后台运行应用程序
  • 设定核心模式
  • 设置
    ulimit-c unlimited
  • 请注意,步骤3完全没有意义:它只会影响设置新限制后创建的进程(在脚本中,这只是
    回显“OK”


    您要做的是执行步骤2、3和1。当按该顺序执行时,
    ulimit-c unlimited
    实际上会影响您的应用程序(它在创建时继承了当前shell的限制)。

    您的脚本首先运行应用程序,然后设置核心文件位置您的程序所用的语言与此无关。内核不关心。更改语句的顺序。“ulimit-c unlimited”应该是第一个语句,然后它应该开始工作。你的脚本首先运行你的应用程序,然后设置核心文件位置。你的程序所用的语言是无关的。内核不关心。更改语句的顺序。“ulimit-c unlimited”应该是第一个语句,然后它应该开始工作