Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

调试技术的应用

872 views

Published on

Published in: Technology
  • Be the first to comment

调试技术的应用

  1. 1. 调试技术的应用Weibo:seveniruby
  2. 2. 内容概要• 调试技术• 调试工具• 辅助测试工具
  3. 3. 常见调试技术• 静态分析(gcc,errhunter,SCT)• 代码植入(log)• 单元测试(googletest)• 代码插桩(ccover,gcov,gprofile)• 调试器(gdb)• 外部监控(systemtap,dtrace,strace, oprofile覆盖率统计工具)
  4. 4. 静态分析• Gcc可dump出所有函数调用,数据引用的关 系。• 通过分析语法树也可以得到程序运行预期• 工具收益:内存泄漏,变量未初始化,非 安全代码。。。。
  5. 5. 代码植入• Log方法是绝大数公司都在采用的方法• 可以统计运行过程和相关数据• 方法收益:问题可以追溯,可定位
  6. 6. 单元测试• 单元测试技术可以提供函数级别的功能校 验• 可以构建底层的功能防护网
  7. 7. 代码插桩• Gcov,ccover,Gprofile通过在编译器插入自 己的统计代码来度量程序运行数据• 方法收益:• 通过debug版本来发现问题,对源代码无影 响。问题定位方便
  8. 8. 调试器• GDB是Linux下标准的调试器。• 功能强大,可以介入运行的全过程,并支 持实时的修改流程和数据• 工具收益:• 实时定位非常方便,开发必备利器
  9. 9. 外部监控• Systemtap• Xtrace系列• Oprofile• 通过操作系统的调试特性来收集程序行为• 工具收益:• 可以得到程序运行的概要数据,比如函数 调用关系,性能损耗比等
  10. 10. GDB• 问题定位最方便• 支持实时接管运行• 支持动态修改• 下面重点介绍GDB
  11. 11. GDB学习• 将官方文档全部看一遍
  12. 12. Gdb位置表示• 位置信息表示方式• File:line• Class::Function• 100,+100,-20• Class::Function::var• *0xXXXXXXX• 附加条件
  13. 13. 定位范围• Bt
  14. 14. 下断方式• Break• rbreak• tbreak• Watch• rwatch• Awatch• catch
  15. 15. 观察• Info locals• Info args• Bt• P• set
  16. 16. 流程控制• Next• step• Continue• Finish• 汇编指令调试
  17. 17. 非交互模式的GDB• Break x• Commands• Info args• Set var a=1• C• end• Gdb –x file
  18. 18. GDB的最大缺点• 无自动化体系• 无自动验证体系• 无法像单测,自动化用例一样,一次编写, 全流程保证。• 只适合解决问题。• 构建质量保护网,比临时救火要更重要
  19. 19. GDBTest• 在GDB工具上做了一层的扩展• 控制GDB去调试待测程序• 在关键点上下断点• 运行程序,记录断点执行情况• 数据分析
  20. 20. 基本用法• Gdbtest == ruby gdbtest.rb• Gdbtest –x 可执行程序 --code 断点类型• Gdbtest –x a.exe –code line #每行代码• Gdbtest –x a.exe –code branch #分支代码• Gdbtest –x a.exe –code function #函数断点• Gdbtest –x a.exe –code mem #内存分配断点
  21. 21. 参考信息• Gdbtest –help• SEPQA Wiki
  22. 22. Gdbtest的目标 • 记录特定函数的调用数据,自动生成单测代码代码层 • 统计内存分配相关函数的执行情况,检测内存泄漏 • 探索运行的所有逻辑,保证功能测试全面,追求零bug逻辑层 • 统计逻辑运行情况 • 比较数据和代码的关联,获取bad case接口层 • Diff测试。从大数据中取样本测试数据,自动生成测试用例
  23. 23. 代码层功能• Q3完成。可以直接生成单测用例,RD和QA 只需要挑选即可• 跟PS合作开发,已经完成demo
  24. 24. 逻辑层功能• 分析运行逻辑• 找到漏测• 分析全部的路径• 了解运行场景• 获得所有预期和非预期情况,然后测试• 零故障保证的重要手段
  25. 25. QS系统的运行图
  26. 26. Image系统的运行图
  27. 27. 扩展机制• GDBTest支持扩展机制• 目前提供了如下扩展• CmdAddon:• 可以在每个断点自动执行命令,也可以导 出数据• TcPathAddon:与自动化结合,运行每个用 例,然后检查用例的执行代码路径
  28. 28. CmdAddon示例• 在当前目录下写入一个cmd.sh文件• 运行gdbtest• 在每个断点执行的时候,都会执行cmd.sh• 应用场景:• 在cmd.sh中写入ps –o rsz –p 3467 输入特定进程 的内存大小• Gdbtest就可以输出每行代码执行时内存的增长 情况
  29. 29. GDBTest的意义• 新技术把调试技术应用与测试之中• 带来了非常多的惊喜• 是继单元测试后的又一次测试技术革命
  30. 30. 其他辅助测试工具• Cppcheck• Errhunter(静态扫描)• Valgrind(检测内存泄漏,多线程死锁)• Hudson (全功能自动化的测试流程)• Bashgems(一体化的集成工具包)
  31. 31. Bashgems框架
  32. 32. bashgems• 设计参考rubygems机制• 可以通过这个框架一键式的安装使用常用 工具• 类似于jumbo• QA的所有重要工具都在此框架内。包括单 测框架,errhunter,valgrind等众多工具• 提供了一些优秀的shell扩展
  33. 33. 扩展命令• Ps的增强版,可以查看常用的各种指标,比 如线程数,内存大小等• Exscreen 一个screen的扩展版本,提供了较 好的界面,可以更好的管理多窗口。同时 可以支持窗口共享,适合多人异地调试。
  34. 34. Valgrind的使用• Bgem –use valgrind就会自动下载valgrind, 加载扩展功能• 为了简化valgrind的使用,提供了一些脚本 扩展• Val_xxx系列功能,已经设置好valgrind的有 用参数,直接运行待测程序即可。• Gdbtest在内存泄漏检测方面比valgrind更精 准
  35. 35. Hudson全功能脚本• 只需要提供代码svn地址和版本号即可• 自动下载代码,构建依赖环境• 自动执行一些测试过程• 是hudson的shell版本执行工具• 还在继续完善中
  36. 36. 全部章节梳理• 调试技术• GDB与GDBTest介绍• Bashgems测试辅助工具包
  37. 37. 质量保证的重要手段• 推动单测,提升底层代码质量• 持续集成,尽早发现问题• 接口层测试,保证需求功能正确• 调试自动化,挖掘测试场景,问题定位,• 线上引流。建立质量监控体系
  38. 38. QA转型• 自动化与数据化带来的挑战• QA提供质量保证的体系• 持续集成,预上线体系、线上监控体系,测试 用例自动生成,结果自动分析,性能测试• 评估、监控、发现• RD,PM去验证问题,解决问题• 根据QA提供的场景分析,数据分析,用例分 析来判断是否符合预期,并进行相应的处理
  39. 39. Thanks• FAQ

×