当前位置: 技术问答>linux和unix
linux如何记录当前进程状态(类似core文件)
来源: 互联网 发布时间:2016-12-08
本文导语: 1 我在系统捕捉到异常后注册了回调,系统不异常退出,因此没有生成core文件。 如何在这个时候记录下全部信息(类似core)生成一个文件。 2 不方便使用GDB去break函数,能不能在代码中发现运行到一个地方的时候...
1 我在系统捕捉到异常后注册了回调,系统不异常退出,因此没有生成core文件。 如何在这个时候记录下全部信息(类似core)生成一个文件。
2 不方便使用GDB去break函数,能不能在代码中发现运行到一个地方的时候生成一个类似core的文件 ,记录信息,但是系统还继续运行。
我比较菜鸟 希望高手回答。
2 不方便使用GDB去break函数,能不能在代码中发现运行到一个地方的时候生成一个类似core的文件 ,记录信息,但是系统还继续运行。
我比较菜鸟 希望高手回答。
|
我google了一下,
http://stackoverflow.com/questions/131439/how-can-a-c-program-produce-a-core-dump-of-itself-without-terminating
void create_dump(void)
{
if(!fork()) {
// Crash the app in your favorite way here
abort() || (*((void*)0) = 42);
}
}
先fork一个子进程,然后再让子进程crash dump
http://forums.freebsd.org/archive/index.php/t-8268.html
char cmd[50];
sprintf(cmd, "gcore %u", getpid());
system(cmd);
调用那个gcore脚本来生成core file 。 gcore其实调用的gdb attach了你的进程生成 core file之后再detach的。
如果你是多进程的应用,可能会有些小的副作用吧。
http://stackoverflow.com/questions/131439/how-can-a-c-program-produce-a-core-dump-of-itself-without-terminating
void create_dump(void)
{
if(!fork()) {
// Crash the app in your favorite way here
abort() || (*((void*)0) = 42);
}
}
先fork一个子进程,然后再让子进程crash dump
http://forums.freebsd.org/archive/index.php/t-8268.html
char cmd[50];
sprintf(cmd, "gcore %u", getpid());
system(cmd);
调用那个gcore脚本来生成core file 。 gcore其实调用的gdb attach了你的进程生成 core file之后再detach的。
如果你是多进程的应用,可能会有些小的副作用吧。
|
参考abort看看