~ 多线程及调试
- 修改记录
- 2011年8月25日 第一次使用freeplane来做笔记,感觉不算,你可以再完善一下,做成你自己的库
- 2013年4月27日21:09:35 增加自己对内存泄露的体会
- 减少bug的产生
- 把waring转成error
- 有wanging不能发布
- 代码检查工作来帮助可能的问题点
- 编码规范来约束代码的质量
- 堆的破坏会出现非常奇怪的问题,检索完整性
-
- _CrtCheckMemory
- GetProcessHeap
- 关于堆的相关信息可以参考: http://blog.csdn.net/ithzhang/article/details/8446489
- 数据结构的自检:关键属性是否在合理的范围
- 数据结构的dump
- 多胜于不能停止的程序
- 嵌入式的开发+log的使用
- assert与log是编程习惯的问题
-
- 泄漏问题
- resouce
memory
gdi
handle:file, socket, mutex
好的方式:
- new:delete, malloc:free
- open:close
- 析构来释放资源与互斥量
- 好的代码的逻辑上清楚的,坏的代码的逻辑上中混乱的
- purify
- bounds cheak
- vc自带的工具
perfmon,mandleExa工具来查看泄漏的问题
【多线程与调试 (FreePlane的mm格式文件导出)】使用VLD来检查内存泄露是一种不错的选择,其基于crt函数的结合可以显示发生内存泄露的调用堆栈,这个就很有用了,对解决问题有很大的帮助。只所以使用这个小工具是因为,64位的win7和boudschecker没有安装起来
- resouce
- 现场信息很重要
- 机不可失,失不再来,事事如此
- dotwson来dump有用的信息
- 死循环的问题
- crash
- :异常退出与中断问题
- access violation:一定要调试
- win32 Sem
- 让我想起了林锐的吃内存的程序,很好玩的,不是吗???
- map与pdb文件的使用方式可以学习一下
- vc使用技巧的问题
- 从经典的vc6到强大的vc2005,及目前超级的vc2010
- 公欲善其事,必先得其器!!!
- 本次培训还只停留在vc的平台上,与gnu还不在一个层次
- 使用windbg加pdb或使用GDB来调试,在更高的一个层次上呀!!!
- vc的断点设置技巧还是要学习一下的——学习知识点
- 内存断点对内存覆盖问题是一个不错的选择
- 各种条件断点的增加是能力的提升
- 无鼠标的操作,才算合格
- watch窗口也能合++执行两次,函数执行,都是可能的,
- 各种工具窗口的使用,在没有能写pdb的运行脚本之前,这个很有很的
- 远程调试的问题
- 远程调试的知识是自己从网上学习过的
- dump
- save dump as
- msdn的学习
- DebugBreak
- 工具
- windump
- 战略与战术
- bug的来历:虫子,真的是虫子
- 只在用户的环境下运行不正常的问题
- 几百万行的代码如何找到bug
- 10%的时间在写代码,90%的时间在调试
- 其实设计才是第一位的,设计做好了,代码质量很高, bug出现的可能性就会降低
在使用工具去查找问题之前请一定要把自己的代码整理一下。最近对内存泄露问题使用工具没有查出,也确定没有内存泄露,原因是以前为调试代码,自己把客户端发过来的请求给放到一个vector中备份,后来给忘记了,在服务端退出时会清除内存,但运行时内存一直在增加,当发现是这个问题引起的假内存泄露时我心都碎了!!!
- 其实设计才是第一位的,设计做好了,代码质量很高, bug出现的可能性就会降低
- 10%的时间在写代码,90%的时间在调试
- 缺陷:设计与需求不相符
bug:程序与功能不一致 - 获取,定位,重现,减少:bug的四步骤
- 思路问题,几个月之后你看你的逻辑感觉怎样
- assert的使用,尽量使用:函数的入口与出口处断言
- log是逻辑问题的最终方法:关键地方输出你的关键信息
- pdb文件:
- release版本的带一些调试信息,优化等级
- map文件的使用,与pdb的区别如何???
- bug的来历:虫子,真的是虫子
- 好的思想
- 逻辑不清楚的人产生的bug越难,问题的关键是设计与逻辑
- 单元测试才是程序员的可靠方案
- 迭代的开发模式
- 程序的单入单出,函数功能的单一化
- 有调试信息的版本,发给用户,来使用
- log是十分重要的工具,查找疑难问题的终极工具
- 预防比调试重要
- 不使用assert的代码中不合格的,人也是不称职的!!!
- 学习,积累,实践
推荐阅读
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- C/C++|C/C++ basis 02
- Qt实战|Qt+OpenCV联合开发(二十一)--图像翻转与旋转
- Qt实战|Qt+OpenCV联合开发(十四)--图像感兴趣区域(ROI)的提取
- Qt实战|Qt+OpenCV联合开发(十三)--通道分离与合并
- opencv|Qt+OpenCV联合开发(十六)--图像几何形状绘制
- Qt实战|Qt+OpenCV联合开发(十七)--随机数与随机颜色
- SNAT的MASQUERADE地址选择与端口选择
- IPTABLES的连接跟踪与NAT分析
- IPVS分析