日期:2014-05-16  浏览次数:20720 次

学习APUE遇到的问题,错误处理函数err_dump看不懂
小弟在学APUE,看到书里面有个错误处理函数err_dump,

/*
  *Fatal error related to a system call
  *print a message ,dump core,and terminate
*/
void err_dump(const char *fmt,...)
{
   va_list ap;
   va_start(ap,fmt);
   err_doit(1,errno,fmt,ap);
   va_end(ap);
   abort();       /*dump core and terminate*/
   exit(1);
}

err_doit 函数打印出错信息,可abort()函数是干什么的?我知道该函数能terminate进程,可dump core是什么意思?还有exit()不也是terminate进程的吗?干嘛又调用abort()又调用exit()?求解答

非常感谢

------解决方案--------------------
没看过这本书.
man 
abort - cause abnormal process termination

应该是配合 ulimit -c 这个使用.
使出错, ``已放弃(吐核)`` 吐核就是dump core吧.
生成core文件.保存出错当时状态,使用gdb可以调试.
core文件参见wiki [http://zh.wikipedia.org/zh/%E6%A0%B8%E5%BF%83%E6%96%87%E4%BB%B6]
简单使用/利用(用来调试)  [http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html]
调试错误时非常有用

引用:
我自己顶顶!!

------解决方案--------------------
错误之后生成core文件方便调试,很有用的。至于后面的问题我找到了一个答案:

详见http://bbs.csdn.net/topics/380205711
void abort(void) /* POSIX-style abort() function */
{
  sigset_t mask;
  struct sigaction action;
  ......
  action.sa_handler = SIG_DFL;
  sigaction(SIGABRT, &action, NULL); /* reset to default */
  sigprocmask(SIG_SETMASK, &mask, NULL); /* just in case ... */
  kill(getpid(), SIGABRT); /* and one more time */
  exit(1); /* this should never be executed ... */
}