Sheppard Y

keep thinking keep coding.

【msvc调试】客户端某个流程后server卡住

2016-07-08 日更新 
此篇博客已经迁移到新博客,并做行文检查和优化排版:
http://blog.clawz.me/2013/06/21/13-debug-server-hang/

 



   单步到崩溃地点,有数组取数据和拷贝操作,猜测数组越界导致的栈溢出。就开始找越界检查工具。

    vs自身带的/GS只是在栈溢出时蹦个异常,不会给你定位崩在哪。所以找了会儿别的工具,boundschecker还没找到下的地方,IBM的purify跨平台但是收费,另外免费好用的就是linux下的valgrind了。这几种内存检查工具都可以检查内存泄露和越界之类的。只是项目现在赶进度,linux平台的编译还没时间解决,内存统一检查就作罢。

    开始看看能不能查dump。dump不是原生的dmp而是历史代码里重存为别的了。vc调试不很熟练,就索性把重存dump那块儿的catch给干掉了。直接让编译器崩到代码块儿再看看能不能看出什么问题。

    崩停到具体代码行了,很惊喜,赶紧看看各变量内存状况,问题数组是一个指针数组,这次惊喜的发现之前单步的那个下标对应在数组元素指针跟别的不一样,为0xcdcdcdcd,确认了下为vc下为未初始化的指针。

    这样就好查了,问题定位到了,后边的就不啰嗦了。

    最终问题是,同事给一个类新加了几个指针成员,但是这几个没有new出来初始化之。唉……只能感叹下敏捷开发那本书里说的,架构师要参加编码,我觉得要加点儿,就是架构师要参与编码还要参与测试调试自己的代码。

posted on 2013-06-21 12:40 Sheppard Y 阅读(654) 评论(0)  编辑 收藏 引用 所属分类: c++


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

留言簿(1)

随笔分类(77)

随笔档案(58)

me

基友

同行

业界前辈

最新随笔

搜索

积分与排名

最新评论

阅读排行榜