当前位置: 技术问答>linux和unix
求助:linux程序崩溃了,但不知道问题在哪里,有什么好的解决方法么?
来源: 互联网 发布时间:2016-09-21
本文导语: 大家好! 这个问题已经困扰好几天了,调的好累,希望大家帮我出出主意啊~ 不甚感激! 我的程序代码量比较大,几万行不止,先前都是好好,直到前几天不知道哪里修改的不对了,导致程序时不时就会自动结束(...
大家好!
这个问题已经困扰好几天了,调的好累,希望大家帮我出出主意啊~ 不甚感激!
我的程序代码量比较大,几万行不止,先前都是好好,直到前几天不知道哪里修改的不对了,导致程序时不时就会自动结束(时间是不定的),有时候显示“[1] - Segment xxx”,有时候显示“[1] - Done xxx”(显示内容具体记不太清)。
我知道问题的原因应该是内存调用错误导致的,但是不知道如何定位了。
我目前主要使用printf打法,但是程序中的7个线程同时运行打印,似乎也无法定位啊。
各位大侠,可否帮我支支招?
这个问题已经困扰好几天了,调的好累,希望大家帮我出出主意啊~ 不甚感激!
我的程序代码量比较大,几万行不止,先前都是好好,直到前几天不知道哪里修改的不对了,导致程序时不时就会自动结束(时间是不定的),有时候显示“[1] - Segment xxx”,有时候显示“[1] - Done xxx”(显示内容具体记不太清)。
我知道问题的原因应该是内存调用错误导致的,但是不知道如何定位了。
我目前主要使用printf打法,但是程序中的7个线程同时运行打印,似乎也无法定位啊。
各位大侠,可否帮我支支招?
|
ulimit -c 1024
打开 core 信息, 编译的时候加上 -g
等程序崩溃了, 可以调试 core 文件。
打开 core 信息, 编译的时候加上 -g
等程序崩溃了, 可以调试 core 文件。
|
你前几天的代码每天做了日备份吗?
如果做了日备份的话,可以一天一天往前找,找到一个不崩溃的版本。
然后比较这个版本和下一个版本之间做了哪些修改。这样就大大缩小了范围。
如果做了日备份的话,可以一天一天往前找,找到一个不崩溃的版本。
然后比较这个版本和下一个版本之间做了哪些修改。这样就大大缩小了范围。
|
如果没有做备份的话,在printf里面加上每个线程的线程ID号。这样就可以方便的区别是哪个线程打印的东西了。
使用下面的函数可以取得自己的线程ID:
#include
pthread_t pthread_self(void);
使用下面的函数可以取得自己的线程ID:
#include
pthread_t pthread_self(void);
|
segment fault 一般是内存溢出,越界之类,可以用vargrind来跟踪。
|