多线程与调试 (FreePlane的mm格式文件导出)

~ 多线程及调试

  • 修改记录
    • 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
      • 析构来释放资源与互斥量
      • 好的代码的逻辑上清楚的,坏的代码的逻辑上中混乱的
      _CrtDumpMenoryLeaks
      • purify
      • bounds cheak
      • vc自带的工具
      _CrtSetAllocHookc
      perfmon,mandleExa工具来查看泄漏的问题
      【多线程与调试 (FreePlane的mm格式文件导出)】使用VLD来检查内存泄露是一种不错的选择,其基于crt函数的结合可以显示发生内存泄露的调用堆栈,这个就很有用了,对解决问题有很大的帮助。只所以使用这个小工具是因为,64位的win7和boudschecker没有安装起来
  • 现场信息很重要
    • 机不可失,失不再来,事事如此
    • 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:程序与功能不一致
    • 获取,定位,重现,减少:bug的四步骤
    • 思路问题,几个月之后你看你的逻辑感觉怎样
      • assert的使用,尽量使用:函数的入口与出口处断言
      • log是逻辑问题的最终方法:关键地方输出你的关键信息
    • pdb文件:
      • release版本的带一些调试信息,优化等级
      • map文件的使用,与pdb的区别如何???
  • 好的思想
    • 逻辑不清楚的人产生的bug越难,问题的关键是设计与逻辑
    • 单元测试才是程序员的可靠方案
    • 迭代的开发模式
    • 程序的单入单出,函数功能的单一化
    • 有调试信息的版本,发给用户,来使用
    • log是十分重要的工具,查找疑难问题的终极工具
    • 预防比调试重要
    • 不使用assert的代码中不合格的,人也是不称职的!!!
    • 学习,积累,实践

    推荐阅读