Debugging 当进程在后台运行时,不会生成CoreDump
我的程序是用C/C++编写的,并使用-ggdb标志编译。并希望看到核心文件正在生成 我从下面的脚本中调出程序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 -
#!/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
回显“OK”
)
您要做的是执行步骤2、3和1。当按该顺序执行时,ulimit-c unlimited
实际上会影响您的应用程序(它在创建当前shell时继承了该限制)
但是当它从上面的脚本中打开时,不会生成corefiles
如果在运行脚本之前将ulimit-c
设置为unlimited
,则应用程序可能会生成一个核心转储
您的脚本有3个功能:
ulimit-c unlimited
回显“OK”
)
您要做的是执行步骤2、3和1。当按该顺序执行时,
ulimit-c unlimited
实际上会影响您的应用程序(它在创建时继承了当前shell的限制)。您的脚本首先运行应用程序,然后设置核心文件位置您的程序所用的语言与此无关。内核不关心。更改语句的顺序。“ulimit-c unlimited”应该是第一个语句,然后它应该开始工作。你的脚本首先运行你的应用程序,然后设置核心文件位置。你的程序所用的语言是无关的。内核不关心。更改语句的顺序。“ulimit-c unlimited”应该是第一个语句,然后它应该开始工作