linux段错误linux 捕获ctrl c之后不知道怎么解决

如何处理c语言中的段错误信息_百度经验
&&&&&&互联网如何处理c语言中的段错误信息
百度经验:我们使用c语言中进行代码的编写的过程中,最容易出现的是段错误。如何好的找到段错误和解决掉这个错误,是我们需要面对的问题。我以前在一家写c语言的公司了。开发底层系统,一般他们使用makefile文件进行编译,makefile文件很大,也很多。一下子编译了很多的文件,导致当文件中,出现一个段错误的时候,基本上,就是很难办的事情,你有不可能,再说所有的问题上,都加上printf()这个东西吧。如何解决这个问题呢:1:我们先来看看段错误出现的几个主要的地方:1.1:段错误出现在,错误的赋值,一般情况下,使用一个指针函数,然后,把这个指针给赋值,这个在写代码的时候,会出现这样的问题。char * sTest =123445;1.2:段错误出现在没有给新声明的值,进行赋值。char abc[1234] ;char bcd[1234];memcpy(abc,bdc,1234);1.3:一些函数内的打印错误。int a = 1234;printf(“%s”,a);2:如何查找段错误出现的地方:使用gdb进行调试,在出现段错误发生的可能地方,放置断点,进行调试。最后,在复杂的代码里,不断地去试验,一般的调试手段是当你出现和你想要的结果不一致的时候,使用printf进行测试,看看结果的不一致。然后,在进行测试,实在找不到原因了,就只有进行单步调试的命令了。经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(2)已投票(2)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆非回享用户暂时不能发布经验“有得”&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验690011热门杂志第1期你不知道的iPad技巧3574次分享第1期win7电脑那些事6241次分享第2期新人玩转百度经验1233次分享第1期Win8.1实用小技巧2548次分享第1期小白装大神1741次分享◆请扫描分享到朋友圈2013年10月 Linux/Unix社区大版内专家分月排行榜第二2013年9月 Linux/Unix社区大版内专家分月排行榜第二
2013年12月 Linux/Unix社区大版内专家分月排行榜第三2013年11月 Linux/Unix社区大版内专家分月排行榜第三2013年6月 Linux/Unix社区大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。运行报错:段错误,核心已转储,求帮忙!!! - 查看主题 & Ubuntu中文论坛
&[ 9 篇帖子 ]&
&文章标题 : 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
10:45帖子: 37
系统: ubuntu
接收感谢: 0 次
自己写了一个简单的shell程序,但是运行报错:段错误,核心已转储[C]#include &stdio.h&#include &unistd.h&#include &fcntl.h&#include &stdlib.h&#include &string.h&#include &signal.h&#include &sys/wait.h&//#define prompt &&&&&&#define bufsize 50char buffer[2048];int version = 1;char buf[bufsize];char commandName[50];char arg1[50];char arg2[50];//void parse(char *prompt,File *fp);//void exec(char *commandName,char *arg1,char *arg2);//void parse2(char *prompt,File *fp);//void parr(char *prompt,File *fp);void parse(FILE *fp);void chaifen();void exec(char *commandName,char *arg1,char *arg2);void copy();void copyOperation (int old,int new);int main(){ while( 1) {
//输出“$”提示符,等待用户输入命令行;
printf(&&&&&&123
parse(stdin);// 命令行; //命令行字符串分析:目标得出待运行程
//序的文件名 commandName,arg1,arg2
if (strcmp(buf,&logout\0&)==0){
printf(&logout2222&);
chaifen();
//if(命令行==logout)
//if((i=fork( )) ==0 )
if ((i=fork())==0)
exec(commandName,arg1,arg2);
sleep(5); }
return 0;}//void parse(char *prompt,File *fp)void parse(FILE *fp)//char *prompt,{
fgets(buf, bufsize, stdin);
printf(&buf= %s&,buf);
//fputs(buf,stdout);//fputs(fgets(s,80,stdin),stdout);
检验是不是把buf的内容输出
}void chaifen(){
//fflush(stdin);
for (i=0;(buf[i]!=' ')&&(buf[i]!='\n');i++)
// printf(&\n&);
commandName[i]=buf[i];
// flag=1;
// printf(&2222\n&);
commandName[i]='\0';
// printf(&
CommandName=%s\n&,commandName);
for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)
arg1[j]=buf[i];
arg1[j]='\0';
// printf(&
arg1=%s\n&,arg1);
for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)
arg2[j]=buf[i];
arg2[j]='\0';
//printf(&
arg2=%s\n&,arg2);}void exec(char * commandName,char *arg1,char *arg2 ){
(strcmp(commandName,&copy&)==0) &&(strcmp(arg1,&file1&)==0)&&(strcmp(arg2,&file2&)==0)
printf(&PID=%d!\n &,getpid());}void copy(){
int i = 0;
int fdold,
fdold = open(&file1&, O_RDONLY);
if(fdold == -1)
printf(&can not open file %s\n&,&file1&);
fdnew = creat(&file2&, 0666);
copyOperation (fdold, fdnew);
printf (&This is process %d\n&, getpid() );
printf(&Copy Done!From %s To %s\n&, &file1&,&file2&);
exit(0);}void copyOperation (int old,int new){
while ((count=read(old,buffer,sizeof(buffer)))&0)
write(new, buffer, count);}[/C]代码编译通过,不用全看,我只是输入了logout,按理说应该会退出while循环,后边的copy之类的都不会运行,但是却出现:段错误,核心已转储,求解释!!!!!
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
11:33帖子: 4793地址: 郑州
代码请用 [code][/code] 包起来,不然没法看。
_________________求人不如求它仨:
Site:     Twitter: @cuihaoleoMachine:
Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450AD:
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
10:45帖子: 37
系统: ubuntu
接收感谢: 0 次
恩,我知道了代码:#include &stdio.h&#include &unistd.h&#include &fcntl.h&#include &stdlib.h&#include &string.h&#include &signal.h&#include &sys/wait.h&//#define prompt &&&&&&#define bufsize 50char buffer[2048];int version = 1;char buf[bufsize];char commandName[50];char arg1[50];char arg2[50];//void parse(char *prompt,File *fp);//void exec(char *commandName,char *arg1,char *arg2);//void parse2(char *prompt,File *fp);//void parr(char *prompt,File *fp);void parse(FILE *fp);void chaifen();void exec(char *commandName,char *arg1,char *arg2);void copy();void copyOperation (int old,int new);int main(){& &while( 1)& &{& && &//输出“$”提示符,等待用户输入命令行;printf(&&&&&&123 &);& &parse(stdin);// 命令行; //命令行字符串分析:目标得出待运行程//序的文件名 commandName,arg1,arg2& &if (strcmp(buf,&logout\0&)==0){&printf(&logout2222&);& &}&else &chaifen();& &//if(命令行==logout)// exit( );& &//if((i=fork( )) ==0 )if ((i=fork())==0)& &exec(commandName,arg1,arg2);& &else& &sleep(5);& &}&return 0;}//void parse(char *prompt,File *fp)void parse(FILE *fp)//char *prompt,{&int i,j;&fgets(buf, bufsize, stdin);&printf(&buf= %s&,buf);&//fputs(buf,stdout);//fputs(fgets(s,80,stdin),stdout); 检验是不是把buf的内容输出}void chaifen(){&int i,j;&//fflush(stdin);&for (i=0;(buf[i]!=' ')&&(buf[i]!='\n');i++)&{&// printf(&\n&);&commandName[i]=buf[i];&// flag=1;&}&// printf(&2222\n&);&commandName[i]='\0';&// printf(& CommandName=%s\n&,commandName);&j=0;&for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)&{&arg1[j]=buf[i];&j++;&}&arg1[j]='\0';&// printf(& arg1=%s\n&,arg1);&j=0;&for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)&{&arg2[j]=buf[i];&j++;&}&arg2[j]='\0';&//printf(& arg2=%s\n&,arg2);}void exec(char * commandName,char *arg1,char *arg2 ){&if ( (strcmp(commandName,&copy&)==0) &&(strcmp(arg1,&file1&)==0)&&(strcmp(arg2,&file2&)==0) )&copy();&else&printf(&PID=%d!\n &,getpid());}void copy(){&int i = 0;&int fdold,&fdold = open(&file1&, O_RDONLY);&if(fdold == -1)&{&printf(&can not open file %s\n&,&file1&);&exit(1);&}&fdnew = creat(&file2&, 0666);&copyOperation (fdold, fdnew);&printf (&This is process %d\n&, getpid() );&printf(&Copy Done!From %s To %s\n&, &file1&,&file2&);&exit(0);}void copyOperation (int old,int new){& && &while ((count=read(old,buffer,sizeof(buffer)))&0)& &write(new, buffer, count);&}
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
11:33帖子: 4793地址: 郑州
噗,原来的缩进就是这样?一塌糊涂嘞……算了,别管我了,我也不懂这。
_________________求人不如求它仨:
Site:     Twitter: @cuihaoleoMachine:
Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450AD:
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
21:41帖子: 22323
系统: OS X
帮 lz 编辑了下次不要重复发帖
_________________NO DO NO DIEhttp://a/%%30%30
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
18:17帖子: 116
送出感谢: 0 次
使用gdb调试代码:GNU gdb (Ubuntu/Linaro 7.4-ubuntu2) 7.4-2012.04Copyright (C) 2012 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later &http://gnu.org/licenses/gpl.html&This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.& Type &show copying&and &show warranty& for details.This GDB was configured as &i686-linux-gnu&.For bug reporting instructions, please see:&http://bugs.launchpad.net/gdb-linaro/&...Reading symbols from /home/suntao/code...done.(gdb) b 32Breakpoint 1 at 0x80485cc: file code.c, line 32.(gdb) rStarting program: /home/suntao/code Breakpoint 1, main () at code.c:3232& && && & parse(stdin);// 命令行; //命令行字符串分析:目标得出待运行程(gdb) n&&&&&123& &logoutbuf= logout34& && && & if (strcmp(buf,&logout\0&)==0){(gdb) n38& && & & & & & & &chaifen();(gdb) Program received signal SIGSEGV, Segmentation fault.0x in chaifen () at code.c:8181& && &for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)(gdb) p i$1 = 1760(gdb) 可以看到出现段错误时,在chaifen函数里i的值已经是1760,buf数组越界了。strcmp那里比较不相等,可以看一下fgets的用法,把最后的换行符变为\0。
_________________我是一个程序员。
_________________
评价:&3.85%&
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
10:45帖子: 37
系统: ubuntu
接收感谢: 0 次
fgets应该没有问题,因为在下面一行我输出了
printf(&buf= %s&,buf);,结果输出了正确的,和输入的一样,说明调用了fgets(buf, bufsize, stdin); 已经添加了尾零,你运行的我也有试过,结果和你一样,所以我就不明白了:为什么它会跳过strcmp,反而直接进入chaifen()这个函数!!求解释啊
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
10:45帖子: 37
系统: ubuntu
接收感谢: 0 次
我已经解决了,应该为:
if (strcmp(buf,&logout\n&)==0) 加一个 \n ,我真是妥妥的给它跪了。。。。。
&文章标题 : Re: 运行报错:段错误,核心已转储,求帮忙!!!发表于 :
18:17帖子: 116
送出感谢: 0 次
zero_hsy 写道:我已经解决了,应该为:
if (strcmp(buf,&logout\n&)==0) 加一个 \n ,我真是妥妥的给它跪了。。。。。 fgets是添加了\0,但在\0之前还有\n。您可以看看《UNIX环境高级编程》,里面讲了很多有关UNIX、Linux的知识如函数用法、信号等等。
_________________我是一个程序员。
显示帖子 : 全部帖子1天7天2周1个月3个月6个月1年&排序 作者发表时间文章标题 升序降序&
&[ 9 篇帖子 ]&
正在浏览此版面的用户:, Exabot [Bot] 和 1 位游客
您 不能 在这个版面发表主题您 不能 在这个版面回复主题您 不能 在这个版面编辑帖子您 不能 在这个版面删除帖子您 不能 在这个版面提交附件
选择一个版面
------------------
公告/注意事项
& &新闻和通知
& &校园社团支持
& && &华东校区
& && &华南校区
& && &华北校区
& && &华中校区
& && &东北校区
& && &西北校区
& && &港澳台校区
& && &国外校区
& &软件推荐
& &非常任务
系统安装区
& &教学和常见问答
& && &课堂教学和培训
& &初学者园地 - 17.04 - Zesty Zapus
& &系统安装和升级
& && &新立得和软件源
& && &Wubi安装讨论
& &启动和引导
& &网卡问题以及网络和拨号
& && &校园网拨号
& &笔记本、UMPC支持
& &手机和平板
& && &Ubuntu移动应用开发
& &常用硬件支持
& &系统架构支持
配置美化区
& &字体美化和中文支持
& && &个人配置文件存放点
& &桌面特效
& &窗口管理器
& &屏幕抓图
& &办公、图像、机械电子设计等
& && &Vim和Emacs
& &因特网相关软件
& &影音多媒体
& &Wine及其分支
& &游戏和游戏模拟器
& &虚拟机和虚拟化
& &其它类软件
& &开源模板库
服务器管理
& &服务器基础应用
& &数据库管理
& &服务器维护和硬件相关
& &Ubuntu VPS
参与Ubuntu开发
& &软件和文档翻译
& &编译或打包
& &Ubuntu错误报告
程序设计区
& &Shell脚本
& &GTK+和QT
& &软件/网站开发
& && &Python/Php/Perl
& && &C/C++/Java
& &内核及嵌入式开发
& &开源小工具
& &Ubuntu 17.10
& &Ubuntu 16.04 LTS
& &Ubuntu 14.04 LTS
& &Ubuntu 12.04 LTS
& &Ubuntu 10.04 LTS
& &老旧版本支持
& && &Ubuntu 15.10
& && &Ubuntu 15.04
& && &Ubuntu 14.10
衍生发行版
& &Ubuntu GNOME
& &Kubuntu
& &Xubuntu & Lubuntu
& &Ubuntu中文衍生版
& && &UbuntuKylin
& &Ubuntu国外衍生版
& && &Mint
& &Ubuntu衍生版制作
& &其它类Unix OS发行版
& && &Arch发行版
& && &Debian发行版
& && &OpenSUSE发行版
& && &Deepin
& &深度PK版
& &Ubuntu故事和感慨
& &Full Circle开源杂志
分享交流区
& &同城交流
& &线下活动专版
& &Ubuntu宣传推广
& &论坛管理
& && && &Ubuntu中文网上商店}

我要回帖

更多关于 linux 捕获屏幕输出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信