免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6572 | 回复: 6
打印 上一主题 下一主题

捕获signal后不能生产core dump问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-20 12:06 |只看该作者 |倒序浏览
所有设置均ok(排除ulitmit等问题)

以下代码不能生产core dump

  1. #include <stdio.h>
  2. #include <signal.h>

  3. void cleanupOnSignal(int sig)
  4. {
  5.         printf("sig=%d\n",sig);               
  6.         exit(-1);
  7. }

  8. static errcall(void)
  9. {
  10.         char* p = 0;
  11.         memset(p,0,100);
  12. }

  13. int main(void)
  14. {
  15.         signal(SIGINT,  cleanupOnSignal);
  16.         signal(SIGSEGV, cleanupOnSignal);
  17.         signal(SIGABRT, cleanupOnSignal);
  18.         signal(SIGBUS, cleanupOnSignal);
  19.         errcall();
  20. }
复制代码
屏蔽掉signal几行后就可以了,或者把cleanupOnSignal改为:

  1. void cleanupOnSignal(int sig)
  2. {
  3.         printf("sig=%d\n",sig);
  4.         if (sig != SIGABRT) abort();
  5. }
复制代码
也可以。

貌似应该是某个signal的默认处理函数中做了某些处理来产生core dump。

问题是该如何操作才能在这种情况下正常的生成core dump?

多谢

论坛徽章:
0
2 [报告]
发表于 2010-09-20 13:04 |只看该作者
信号都被你自己处理掉了自然就不会生成core了。。
gcore命令可以手动为进程生成core

论坛徽章:
0
3 [报告]
发表于 2010-09-20 13:13 |只看该作者
极其不建议使用signal(),   建议使用sigactions( )替换signal()

论坛徽章:
0
4 [报告]
发表于 2010-09-20 13:54 |只看该作者
信号都被你自己处理掉了自然就不会生成core了。。
gcore命令可以手动为进程生成core
l.darkfire 发表于 2010-09-20 13:04


和我猜想的差不多,但我该如何自己处理信号(比如call某个函数?)才能生成core呢?

不希望每次要调试时,再把signal去掉;捕获signal也是为了容错,希望出错时能释放一些不会自动释放的资源

论坛徽章:
0
5 [报告]
发表于 2010-09-20 14:04 |只看该作者
一般而言程序会自己捕获信号,对于致命信号做善后处理,然后退出。如果你想在core后能观察到当时发生的情景,可以自己打日志输出相关信息。

还有,调试的时候你把断点设置在不就行啦;或者用#ifdef DEBUG的方式把那些语句括起来,编译的时候将-DDEBUG参数传给编译器

论坛徽章:
0
6 [报告]
发表于 2010-09-20 14:05 |只看该作者
一般而言程序会自己捕获信号,对于致命信号做善后处理,然后退出。如果你想在收到信号后能观察到当时发生的情景,可以自己打日志输出相关信息。

还有,调试的时候你把断点设置在不就行啦;或者用#ifdef DEBUG的方式把那些语句括起来,编译的时候将-DDEBUG参数传给编译器

论坛徽章:
0
7 [报告]
发表于 2010-09-20 16:03 |只看该作者
捕获导致core dump的信号,做了你自己的处理后,再取消此信号函数,再然后给自己发送刚刚收到的信号。
void signal_segv(int signum)
{
    ....
    // 释放那些你想释放的资源
    ....

    signal(SIG_SEGV, SIG_DFL);
    kill(getpid(), signum);
}

不知道这样做符不符合你的要求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP