Google-coredumper 学习总结


1. 去下载

当前最新版本为 1.2.1 。

项目链接: http://code.google.com/p/google-coredumper/

2. 安装

./configure 、 make 、 make install 。
或者用dep包
dpkg -i libcoredumper1_1.2.1-1_i386.deb
sudo dpkg -i libcoredumper-dev_1.2.1-1_i386.deb
3. 测试demo

#include
#include
#include
#include

jmp_buf env;
void sig_func(int signo)
{
        printf("segment falut: caught signal: %d/n",signo);
        if( WriteCoreDump("coredump.txt") ==0 ) {
                printf("success: WriteCoreDump to coredump.txt/n");
        } else {
                printf("failure: WriteCoreDump to coredump.txt/n");
        }
}
void do_something()
{
        printf("do_something!/n");

}

void MakeSignal()
{
        char *q;
        q = 0;
        q[2] = 'b';

}
int main()
{
        signal(SIGSEGV, &sig_func);
        signal(SIGTERM, &sig_func);
        signal(SIGINT, &sig_func);
        MakeSignal();
        return 0;
}

gcc -o GCoredumperTest -lcoredumper googlecoredumper.c
运行程序
./GCoredumperTest

 

gdb GCoreDumperTest  coredump.txt

 

 

4. 多线程方式的支持

代码如下:

#include #include #include #include #include jmp_buf env; pthread_t pid; void svc(void *p) { printf("hello thread %s/n",(char*)p); int * array= 0; array[2] = 1; } void sig_func(int signo) { printf("caught signal: %d/n",signo); if( WriteCoreDump("coredump.txt") ==0 ) { printf("success: WriteCoreDump to coredump.txt/n"); } else { printf("failure: WriteCoreDump to coredump.txt/n"); } longjmp(env, 1); } void job() { char threadmsg[] = "1"; pthread_create(&pid,NULL,svc,threadmsg); } int main() { int i = 0; char *pPthreadResult; signal(SIGSEGV, &sig_func); signal(SIGTERM, &sig_func); signal(SIGINT, &sig_func); if(setjmp(env)==0) { job(); } else { for (;i<3;i++) { printf("main thread sleep for:%d/n",i); sleep(1); } } pthread_join(pid,&pPthreadResult); return 0; }

 

允许步骤和输出:

 

 

 

你可能感兴趣的:(Linux编程,C++/C)