以编程方式打开核心/崩溃转储

时间:2011-11-15 22:34:39

标签: c linux

我知道我可以跑 “ulimit -c unlimited”

在shell中打开当前用户的核心转储。 我想知道的是如何以编程方式从C?

执行此操作

我看到有一个ulimit调用,但它已被弃用而不是get / setrlimit。 我想知道的是对setrlimit的等效调用是什么允许崩溃转储 要生成?

2 个答案:

答案 0 :(得分:19)

我找到了一个有效的解决方案。现在正在创建核心文件。

struct rlimit core_limit;
core_limit.rlim_cur = RLIM_INFINITY;
core_limit.rlim_max = RLIM_INFINITY;

if (setrlimit(RLIMIT_CORE, &core_limit) < 0)
    fprintf(stderr, "setrlimit: %s\nWarning: core dumps may be truncated or non-existant\n", strerror(errno));

信用到这里:http://adamrosenfield.com/blog/2010/04/23/dumping-core/

答案 1 :(得分:0)

如果您要检查当前的流程限制,则

final SerializableFinder finder = find.byType('MyWidget');
expect(finder, findsNWidgets(4));

如果您要设置新的限制而不是使用下面的代码

//////////////////////设置限制////////////////////////// //////

让它变得简单

struct rlimit  v;   //you can decelare any variable

getrlimit(RLIMIT_CORE, &v);

printf("softlimit=%d   hardlimit=%d  \n",v.rlim_cur,v.rlim_max);

struct rlimit v; v.rlim_cur = 0 ; //if you do not want the core dump file /* v.rlim_cur=RLIM_INFINITY; //set maximum soft limit of the file(unlimited) */ v.rlim_max = RLIM_INFINITY; //for reference to the soft limit(unlimited) setrlimit(RLIMIT_CORE, &v); 的值介于0和无穷大之间,这意味着将生成核心转储并将其截断为指定的大小。这有可能造成核心转储不完整