好的,不要问我为什么,我想创建一个测试程序的核心文件。它没有损坏,也不会出问题,但我想生成一个核心文件。以下是代码:
#include <stdio.h>
int main(){
printf("TEST");
}
正如我所说的那样,这非常简单,但我想能够转储它的核心。我该怎么做呢? 顺便说一句,我在Ubuntu 10.04上。
在加载了可执行文件的gdb命令提示符下,使用generate-core-file
命令。
未定义命令:"generate-core-file"。请尝试"help"
* - jww如果您可以更改程序并添加对abort()
的调用,将在许多Unix环境中生成核心转储。
您需要确保已启用核心文件。未生成核心文件的最常见原因是零大小的核心 ulimit 。使用命令 ulimit -c
检查并使用 ulimit -c unlimited
重置为零。
如果您不想更改程序,则可以使用kill命令发送abort信号: kill -SIGABRT <pid>
但是对于如此短的程序,您可能需要使用脚本,即使使用脚本,您也可能无法在进程退出之前获得信号。
使用bash,您可以尝试像这样做(假设您的程序名为a.out
并且在当前目录中):
./a.out & kill -SIGABRT $!
&
表示在后台运行命令,$!
是最近执行的后台命令的进程 ID。
将您的程序加载到gdb中,设置断点,运行到断点,然后
(gdb) generate-core-file
未定义命令:"generate-core-file"。请尝试"help"
* - jwwgcore
命令。
kill -SEGV <pid>
命令来模拟一个段错误。 - mvds