调试:客户端某个流程后 Server 卡住
文章目录
单步到崩溃地点,有数组取数据和拷贝操作,猜测数组越界导致的栈溢出。就开始找越界检查工具。
VS 自身带的 /GS
只是在栈溢出时蹦个异常,不会给你定位崩在哪。所以找了会儿别的工具,BoundSchecker 还没找到下的地方,IBM 的 Purify 跨平台但是收费,另外免费好用的就是 Linux 下的 Valgrind 了。这几种内存检查工具都可以检查内存泄露和越界之类的。只是项目现在赶进度,Linux 平台的编译还没时间解决,内存统一检查就作罢。
开始看看能不能查 dump。dump 不是原生的 dmp 而是历史代码里重存为别的了。VC 调试不很熟练,就索性把重存 dump 那块儿的 catch 给干掉了。直接让编译器崩到代码块儿再看看能不能看出什么问题。
崩停到具体代码行了,很惊喜,赶紧看看各变量内存状况,问题数组是一个指针数组,这次惊喜的发现之前单步的那个下标对应在数组元素指针跟别的不一样,为 0xcdcdcdcd
,确认了下为 VC 下为未初始化的指针。
这样就好查了,问题定位到了,后边的就不啰嗦了。
最终问题是,同事给一个类新加了几个指针成员,但是这几个没有 new 出来初始化之。唉……只能感叹下敏捷开发那本书里说的,架构师要参加编码,我觉得要加点儿,就是架构师要参与编码还要参与测试调试自己的代码。