免费注册 查看新帖 |

Chinaunix

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

编写代码时不用GDB的一个教训 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-22 00:27 |只看该作者 |倒序浏览

                在GTK+中,使用C语言来实现面向对象技术,但不像C++,它的各组件之间的继承关系是在运行时才进行动态检查,故事就发生在这里...
我正在编写 hypersrc 这个软件有60个源文件,以前是用 Gtk+-1.2 实现,现在要将其移值到 Gtk+-2.0 版本,整个过程比较顺利,由于原作者对代码的组织比较规范,因此只需修改两个文件就能将代码编辑器从 GtkText 升级到 GtkSourceView,但是由于大意,有一个 GTK_TEXT(xxx) 的类型转换没看见,故事发生了...
问题发生在查找功能,只要一选择查找菜单项,程序就会在控制台打印一个错误说明:convert from GtkSourceView to GtkText。 除此之外,再没有别的信息,好在有一个GNU Bug汇报软件会动态地收集崩溃程序的故障时调用堆栈,通过其函数调用情况发现故障出现在 SaveCursor() 函数处;找到此函数,仔细检查,发现确实有一个语句错误地进行了 GTK_TEXT() 的类型转换,将其删之,故障排除。
忽然想到使用 GDB 来跟踪一下出错的程序,想知道会不会有更全面的错误提示,把错误还原,编译时加入 -g 选项,编译完后使用 gdb 装入程序,选择查找菜单,奇迹发生了, 在gdb 中运行的程序在出现错误时,准确地指明了出错的代码行,如果一开始就使用 gdb 跟踪程序,那这次的问题将大大地减少跟踪的时间,教训!(注:如果不使用 gdb 装入程序来运行,而单使用 -g 选项编译程序,不能指出出错行)
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11826/showart_188647.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP