wingdb开发过程中遇到一个比较“头疼”的bug
来源:互联网 发布:电信运营商网络架构 编辑:程序博客网 时间:2024/05/18 09:38
我自持也写了XX行的代码,调试经验也不可谓不强。但是最近遇到的这个bug,却
着实让我头疼了一会...错!不是一会,是3天啊!
具体是这样的,在开发windows下的gdb GUI调试环境时,使用thread PIPE与gdb mi
接口交互,在winodows 7下编写代码。上周五突然遇到一个问题:就是程序运行着就会突
然崩溃。马上用ollydbg作为系统默认活动调试器,在崩溃后立即调试进程,发现错误点
随机出现在主线程和PIPE READ线程中,而且指令在ntdll中出错。并且看不到调用链,
不能回溯到我的程序中去,这说明不是我的程序直接引发的,而是“间接”引发的问题。
奇怪的事来了,如果我用wingdb调试其他的pe文件不会出错,只有特定的那一个pe
文件必错。比这个pe文件大或小的文件都不错,单单这个pe文件会错。而且只在向gdb
mi发送特定的cmd时才会错,使用其他cmd不会错:
read_str_4a_cmd(&g_npp,"set disassembly-flavor intel\n",buf_tmp,&size,5000); //err!read_str_4a_cmd(&g_npp,"set\n",buf_tmp,&size,5000); //ok!
第一条指令返回的string长度要大于第二条。而且还有更郁闷的事,在debug模式下
运行程序,啥错都没有,怎么都不崩!调试最痛苦的事莫过如此....
由于在windows7下调试安全保护不便的原因所以我尝试在xp下调试,看能不能找
到问题根结。更奇怪的事来了,在双核系统xp下没有出错!而且我原来的windows7
是单核的系统,我原以为可能是多线程同步的问题,这时觉得也不像。
不能就此放过, 不能幻想是系统的bug,不是我的。并且念上10000句fxxk后,回去
肆虐TA发泄!我再一次回到windows7系统上,最小化出错点(就像我不止一次在汇编及
C区说的那样),编写对应的单元测试,增加PRINT DEBUG语句,不是一条两条的加,
而是几十条的加。因为MinGW调试有限,所以换了调试也很有限的Code::Blocks,不过
比MinGW好点。使用VS 20xx的各位可能会暗自窃喜:叫你不用VS IDE。我承认在这个
方面如果我最初用VS开发,也许调试起来就会快很多。也许吧...但我不能也不打算在回
到那个VS IDE中去,原因使用GCC的各位同仁自然懂得...
言归正传,在用最简化的UNIT TEST测试后,发现崩溃出在C库函数free()里。在经
历了N多的反复递进调试中后(就像在魔兽3中从zero开始建基地那样),终于发现根本
问题所在:在N多的malloc和赋值和free中,一个赋值往末尾多赋了一个'\0',就是这一个
byte导致C heap链表被破坏,使得最终在某次的free中(主线程或PIPE Thread)发生崩溃
。然而为什么只有特定的文件,特定的指令才会崩溃,我想这个只能感谢GOD让我遇到
了那个出错的文件,并且出错了。因为这种错误和未初始化的变量一样属于“随机”情况。
细心的朋友可能还不放过,会问:那在XP下为什么不出错?这个很简单,因为win7的
安全性和鲁棒性(如果我让你产生了联想,那么我换一个词:健壮性)比xp要高,
that's why!!!
末了我想再说几句,如果用NT的debug heap和若干wingdb选项的话,我还用这么费
劲吗???呜呜呜...不过没事了,重要的是我会记住"调痛",我可以GO ON了,呵呵。
侯佩|hopy
2011.08.08 1428
- wingdb开发过程中遇到一个比较“头疼”的bug
- 【原创】wingdb开发过程中遇到一个比较“头疼”的bug
- 开发过程中遇到的BUG
- 使用WebDriver的过程中遇到的一个Bug
- iOS开发笔记之四十三——日历NSCaledar使用过程中遇到的一个苹果系统bug
- JSP学习过程中遇到的比较记忆深刻的bug
- 开发过程中遇到的bug以及解决办法 面试回答个人遇到
- 使用angularjs过程中遇到的bug
- AndroidStudio使用过程中遇到的bug
- AndroidStudio使用过程中遇到的bug
- 学习QT过程中遇到的各种头疼的问题…
- 学习QT过程中遇到的各种头疼的问题…
- 一个pda开发过程中遇到的问题 请教高手
- 记录一下开发过程中遇到的一些让人纠结的bug
- iOS开发中遇到的bug
- android开发中遇到的一些bug
- Xcode开发中遇到的Bug
- 我在开发中遇到的bug
- 设置NTFS的文件/文件夹安全权限
- sphinxSE+mysql部署实现
- OWC详解,以及OWC生成柱图,线图,饼图示例
- hdu 3046
- oracle-xe fedora14安装
- wingdb开发过程中遇到一个比较“头疼”的bug
- 学习ojective之一
- wcsf
- asp.net怎么获取服务器基本信息
- Linux 挂载Qcow2硬盘
- ojective学习之二
- C、C++语言,源码中整形数的进制问题
- Effective C++读书笔记 资源管理(之一)
- Access 操作或事件已被禁用模式阻止