免费注册 查看新帖 |

Chinaunix

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

[C] 如何调试大程序中的Segmentation fault错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-17 12:10 |只看该作者 |倒序浏览
10可用积分
我写了一些c程序,看似没有问题,并且运行正常.但等我把他们编译进php的时候,运行我写的模块就报.Segmentation fault,
这个时候我知道肯定是我刚才写的程序出问题了,出现了指针越界或操作了空指针.
因为在程序量小的情况下这错误也许被容忍了,但编译进了php后问题后一点小错误就会导致Segmentation fault运行失败!

昨天我花了好几个小时才发现问题所在,恼火啊。

要是在我自己测试(编译成可执行文件,还没有编译进php)的时候就抱错的话,我知道可以用gdb来调试,很容易找出错误所在,但象这种编译进了php才抱错的情况,怎么查啊!

所以想请教下这样的情况应该怎样来查错,类似php这样的大程序有没有什么code文件可以来查错。或者应该怎样来查php中的Segmentation fault错误

最佳答案

查看完整内容

分享一下我调程序的方法。不过我的程序一般不是很大,找BUG时最大的程序可能时4,5千行吧。因为我的程序都是流程性的,首先就是判断程序能够走到哪里就over了。那么这个可以采用分析和估计的方法,实在不行就折半吧,哈哈。不过不推荐这样,毕竟你自己的程序你应该比较熟悉。如果找到程序大致出问题的地方,然后再对这个地方进行微调。采用简单的Printf就可以。因为我的程序属于命令行的,本身就是需要在终端下调试的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2008-10-17 12:10 |只看该作者
分享一下我调程序的方法。不过我的程序一般不是很大,找BUG时最大的程序可能时4,5千行吧。

因为我的程序都是流程性的,首先就是判断程序能够走到哪里就over了。那么这个可以采用分析和估计的方法,实在不行就折半吧,哈哈。不过不推荐这样,毕竟你自己的程序你应该比较熟悉。

如果找到程序大致出问题的地方,然后再对这个地方进行微调。采用简单的Printf就可以。因为我的程序属于命令行的,本身就是需要在终端下调试的。

论坛徽章:
0
3 [报告]
发表于 2008-10-17 12:16 |只看该作者
没code,咋个猜啊

还有,编进PHP才会报错,在gdb下面没有报错,难道是和PHP有关?

[ 本帖最后由 nicozhou 于 2008-10-17 12:19 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-10-17 12:35 |只看该作者
大程序调试找Bug,一般都找大牛。。

大项目的日志,调试信息应该比较全面,出问题首先应该是分析日志,然后找到事故点

[ 本帖最后由 雨过白鹭洲 于 2008-10-17 12:38 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-10-17 12:38 |只看该作者
原帖由 雨过白鹭洲 于 2008-10-17 12:35 发表
大程序调试找Bug,一般都找大牛。。



联调,关键就是要找出错在谁的模块。撇清和自己的关系

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [报告]
发表于 2008-10-17 12:39 |只看该作者
原帖由 雨过白鹭洲 于 2008-10-17 12:35 发表
大程序调试找Bug,一般都找大牛。。

大项目的日志,调试信息应该比较全面,出问题首先应该是分析日志,然后找到事故点

小牛啥时候变大牛

论坛徽章:
0
7 [报告]
发表于 2008-10-17 12:40 |只看该作者
原帖由 ynchnluiti 于 2008-10-17 12:39 发表

小牛啥时候变大牛

随着时间、技能的进步就能变大牛

论坛徽章:
0
8 [报告]
发表于 2008-10-17 12:41 |只看该作者
原帖由 ynchnluiti 于 2008-10-17 12:39 发表

小牛啥时候变大牛

小牛一开始是靠吹的,慢慢就大了

这贴不能就这样被水了。。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2008-10-17 13:17 |只看该作者
首先要大致的定位是哪里的问题啊。或者是各个模块分开调试。让出问题的地方更加细化。然后定位到某个模块了,就在这个模块里面用GDB,看看到那里出现了内存或指针操作失败的问题

论坛徽章:
0
10 [报告]
发表于 2008-10-17 13:38 |只看该作者
gdb php不行么
php也可以运行在命令行模式的
自己编整个php的时候也可以加入-g
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP