免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4216 | 回复: 16
打印 上一主题 下一主题

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-09 09:51 |只看该作者 |倒序浏览
为什么总会出现"sigmentation fault"和"command terminated"?

我正在将应用系统从Sco Openserver5.0.5移植到Redhat7.2上,遇到不可思议的问题,也许是我在Linux还是入门甚浅。

(1)在SCO上,makefile中编译命令如下例:

cc -o app app.o ...... -lx -lnsl_l ......

无论是Pentium、PII、PIII机器,编译出来的运行时系统都运行稳定健壮。

(2)在Redhat上,makefile中编译命令如下例:

gcc -o app app.o ...... -mlarge -O3 -march=pentium -lnsl .......

Pentium机器,运行时总会出现"segmentation fault"或"command terminated",然后退出。

出现这个问题的地方还不定,有时在这里,有时在那里。

奇怪的是,有时程序出错退出的地方,加一些printw、getch语句停顿一下,就能过去了,但在其他地方肯定有另一问题等在那里。

用gdb调试发现进程是收到一个SIGSEGV信号后退出的,有时在malloc过程中收到该信号,有时又在strcmp过程中收到。


在SCO上,程序运行的状态是可预料的,有错误就一定是人的错误,调试时甚至不用工具,只在程序中加些printf语句,定位错误,排除后同样的问题就不会再出现。

而在Redhat上,一切是那么不可预料,明明排除了一个问题,下一次排除其他问题后,在同一地方同样的问题还会再出现。

难道Linux的稳定性是炒出来的,根本名不副实?还是我没入门呢?

如果是后者,快请此中高手指点迷津。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2004-01-09 10:06 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

Linux 的稳定性是相对的,要是真的那么100%可靠,还会有人花钱去买SCO吗?
但最近几个版本 Linux 的稳定性越来越好了,所以 SCO 才想办法要让 Linux 也成为付钱的。这样SCO才会有的混。
你的编译过程要没错的话,你能不能保证那台Linux的机器没问题。因为我不懂编程,但要是内存有问题的话,可能也会有 Segmentation fault 吧。

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
3 [报告]
发表于 2004-01-09 12:25 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

你自己的程序选择用-O3编译,不合适自找不可预测的结果吗?呵呵。尤其如果你的gcc版本比较怪异。

论坛徽章:
0
4 [报告]
发表于 2004-01-09 12:46 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

移植本身就有比开发更困难的因素,更况且你都说你自己对linux并不了解,你指望linux和sco的兼容性好到什么地步呢?另外编译参数也很重要

论坛徽章:
0
5 [报告]
发表于 2004-01-19 09:05 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

问题我已经解决了,还是自己程序中指针导致的错,有时换一种写法就通过了,比如,原来用循环移动指针,内存出错,改用指针加法就通过了,其中原因还不清楚。

谢谢各位的热心回帖。

论坛徽章:
0
6 [报告]
发表于 2004-01-19 09:11 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

gcc作编译时,最好不要加优化参数,尤其是优化过度时,会出现一些难以解释的问题

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
7 [报告]
发表于 2004-01-19 15:46 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

-O2 还是可以用的,如果对自己的程序有信心,也可以用-O3。比如mysqld

论坛徽章:
0
8 [报告]
发表于 2004-01-19 15:49 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

原帖由 "jerr" 发表:
问题我已经解决了,还是自己程序中指针导致的错,有时换一种写法就通过了,比如,原来用循环移动指针,内存出错,改用指针加法就通过了,其中原因还不清楚。


也许正是因为KERNEL的不同才导致的这样的问题

论坛徽章:
0
9 [报告]
发表于 2004-01-19 16:25 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

这种情况绝大多数是你的程序写得有问题,不是OS的稳定性问题。从你这种思路来看,你确实对linux不太熟悉,对其他unix也不见得有多熟悉

论坛徽章:
0
10 [报告]
发表于 2004-01-19 16:56 |只看该作者

艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

1)segment fault: 我想楼主可能是跨kernel和user space引用了。在kernel空间直接访问user 空间的数据,偶尔是可以的,但是这是错误的,是出现 segment fault可能的原因之一。
2)对于加入打印信息而使得程序正常运行。我想需要考虑printk, printf是否可能影响程序的时序,我遇到过一种情况,打印带回车符的printk就能够正常工作,后来发现这个printk相当于一个cache_writeback过程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP