2012-11-05 46 views
1

生成从C程序核心可能重复:
How can a C program produce a core dump of itself without terminating?在Solaris

我想生成从C程序的芯而不终止正在运行的进程。 操作系统是Solaris。

我知道gcore可以用于此目的。但我不知道如何使用C程序中的'gcore'。

+0

这是否需要通过程序来完成?您可以在gdb中附加并运行命令generate-core-file来获取核心。 – dbeer

+0

我不希望程序过早结束,我希望它运行,但希望在特定行中捕获内核,同时继续流动。顺便说一句,我也不能使用gdb,因为它发生在生产环境中。我只能更改代码并将exec复制到prod m/c,运行该程序并检查核心转储。 –

+0

例如:AIX上的gencore()在http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fgencore .htm,我正在寻找类似的solaris编程方式.. –

回答

1

gcore在C中实现,源代码为available,所以显然可以复制它的功能。然而,从源头上看,它使用了半私有的库,其核心生成代码相当复杂。

这似乎是简单地使用system(3)或它的一些变种援引gcore最好的选择:

int gcore(pid_t pid) 
{ 
    char *cmd[256]; 
    snprintf(cmd, sizeof cmd, "gcore %ld", (long) pid); 
    // returns 0 on success, -1 on system failure (errno set), or >0 on 
    // gcore failure (in which case use the W* macros defined in 
    // <sys/wait.h> to extract additional information from value). 
    return system(cmd); 
} 

(Link to <sys/wait.h> docs.)