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

linuxGDB里运行正常, 但非GDB运行就异常退出, 而且还不生成core文件.
程序运行环境为   red   hat     A4   linux,           写了一个网络服务程序,     奇怪的是服务在gdb里面跑就运行正常,       但是在非GDB环境下跑,   就异常退出,   而且还不生成core文件.    

      我查这个问题已经一个多星期,   郁闷死了,   现在还不知该怎么下手.

------解决方案--------------------
为了生成coredump,设定一下环境

ulimit -c unlimited

参考:
http://justlinux.com/forum/archive/index.php/t-136325.html

------解决方案--------------------
to cceczjxy()
1. 时间同步和异常退出有什么关系?
2. 内存溢出应该有core文件才对, 但在gdb环境下是正常的.


------------------------------------
1,说错了,不是时间同步,是线程间的同步,你的程序是多线程的不?如果不是就没有这样的错误了.

2,生不生成core,要看你的设置了,你设置的允许生成core文件不?


不管怎样,应该先定位到错误的位置再说.


3,网络服务程序?你检查一下各种信号,看是那中情况退出的.
我以前遇到过一种情况:
服务端从客户端读取请求数据后,一阻塞方式处理数据(时间不长),处理完成后继续从客户端读取数据.
测试时发现,如果在处理数据时客户端主动断开连接,那么在处理完数据后读取数据的时候,就会产生PIPE
信号.但是,如果数据处理的时间短的话,处理时断开连接则不会出现那样的情况.

------解决方案--------------------
异常退出就一定会生成core吗? 难道没有不生成core的异常退出??

如果不是正常退出的那就是有信号引起的程序退出.有些信号确实能引起程序退出但不生成core;

SIGHUP 终止进程 终端线路挂断
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到

把可能的信号都设置上句柄,看是那种情况.
------解决方案--------------------
不是吧, SIGSEGV就是Segment fault, 这个是产生core的, 还有SIGFPE浮点错误, 这些都是产生core的.

--------------------------------------------
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常

没说它不建立core文件呀