最近在写python,用了email/sqlite3/mysql/poplib/等东东。程序写完后进行压力,发现无端端退出了,把ulimit -c 设置成比较大的数字(在linux下默认是0 ),让它产生core文件。跟踪了N个core文件,都是在malloc/free之类的地方,感觉就是多线程问题,冲乱了内存。但是隔着一个python解析器,难以跟踪,花了两三天时间都没找到问题,郁闷了好久。Python都会coredump?用了python好久的高手都不解。
最后没办法,只能“拆卸”来找问题,依次拆了解析mail部分、pop部分、mysql部分,都照样core,最后拆sqlite3,不core了。python2.5可是自称自带sqlite3的啊!!居然有问题。详细研究后,发现python2.5所谓自带sqlite3,其实只是自带了sqlite3的封装接口,还是需要下载sqlite3.4的包进行安装,然后在python2.5的setup.py中修订sqlite3的路径(如果不是默认路径安装),才会生成_sqlite3.so。而sqlite3在linux下编译默认是不支持多线程安全!在windows下反而默认是支持的。GOD!!! 增加多线程选项:
--enable-threadsafe --enable-cross-thread-connections
目前跑得很稳定,不再出现coredump现象。
惨痛的coredump经历,差点打击了我对python的信心!!
分享到:
相关推荐
GDB之在线调试与Coredump分析,通过gdb一步步分析coredump文件。
Linux Core Dump 权威书籍
在window程序中,添加代码一边在程序崩溃时候产生coredump,能准确定位崩溃地点。
如何在让docker中运行的进程生成core dump文件
通过实例来分析linux中如何定位coredump问题。非常实用
Linux下如何生成core dump
高通core dump解析工具。仅自己上传做个备份。
AIX 下的 core dump 分析入门.mht,html文档,请大家参考以下
coredump栈分析介绍 coredump stack frame-pointer 栈分析 coredump stack frame-pointer 栈分析 coredump stack frame-pointer 栈分析,初学者可参考
海思busybox+coredump
Android Coredump简介及使用_v1.0_201504281025.pdf
coredump文件调试
coredump栈分析
請下載本文用到的coredump: Linux Debugging: coredump 分析入門的材料Program received signal SIGSE
本文模拟了除零错误发生时,嵌入式arm Linux平台生成的core文件,并在PC端采用arm-gdb解析该core文件,从中可以看出程序崩溃时的函数调用。
要保证存放coredump的目录存在且进程对该目录有写权限。存放coredump的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正 的当前...
coredump使用
Linux应用程序调试之debug_coredump
囧囧囧囧囧囧囧囧囧coredump_article囧囧囧囧囧囧囧囧囧
SegmentFault(coredump)调试方法.pdf