SlideShare ist ein Scribd-Unternehmen logo
1 von 42
调试技术的应用

Weibo:seveniruby
内容概要
• 调试技术
• 调试工具
• 辅助测试工具
常见调试技术
•   静态分析(gcc,errhunter,SCT)
•   代码植入(log)
•   单元测试(googletest)
•   代码插桩(ccover,gcov,gprofile)
•   调试器(gdb)
•   外部监控(systemtap,dtrace,strace,
    oprofile覆盖率统计工具)
静态分析
• Gcc可dump出所有函数调用,数据引用的关
  系。
• 通过分析语法树也可以得到程序运行预期

• 工具收益:内存泄漏,变量未初始化,非
  安全代码。。。。
代码植入
• Log方法是绝大数公司都在采用的方法
• 可以统计运行过程和相关数据

• 方法收益:问题可以追溯,可定位
单元测试
• 单元测试技术可以提供函数级别的功能校
  验
• 可以构建底层的功能防护网
代码插桩
• Gcov,ccover,Gprofile通过在编译器插入自
  己的统计代码来度量程序运行数据

• 方法收益:
• 通过debug版本来发现问题,对源代码无影
  响。问题定位方便
调试器
• GDB是Linux下标准的调试器。
• 功能强大,可以介入运行的全过程,并支
  持实时的修改流程和数据

• 工具收益:
• 实时定位非常方便,开发必备利器
外部监控
•   Systemtap
•   Xtrace系列
•   Oprofile
•   通过操作系统的调试特性来收集程序行为

• 工具收益:
• 可以得到程序运行的概要数据,比如函数
  调用关系,性能损耗比等
GDB
• 问题定位最方便
• 支持实时接管运行
• 支持动态修改

• 下面重点介绍GDB
GDB学习
• 将官方文档全部看一遍
Gdb位置表示
•   位置信息表示方式
•   File:line
•   Class::Function
•   100,+100,-20

• Class::Function::var
• *0xXXXXXXX
• 附加条件
定位范围
• Bt
下断方式
• Break
• rbreak
• tbreak

• Watch
• rwatch
• Awatch

• catch
观察
•   Info locals
•   Info args
•   Bt
•   P
•   set
流程控制
•   Next
•   step
•   Continue
•   Finish
•   汇编指令调试
非交互模式的GDB
•   Break x
•   Commands
•   Info args
•   Set var a=1
•   C
•   end

• Gdb –x file
GDB的最大缺点
• 无自动化体系
• 无自动验证体系
• 无法像单测,自动化用例一样,一次编写,
  全流程保证。
• 只适合解决问题。
• 构建质量保护网,比临时救火要更重要
GDBTest
•   在GDB工具上做了一层的扩展
•   控制GDB去调试待测程序
•   在关键点上下断点
•   运行程序,记录断点执行情况
•   数据分析
基本用法
• 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 #内存分配断点
参考信息
• Gdbtest –help
• SEPQA Wiki
Gdbtest的目标
      • 记录特定函数的调用数据,自动生成单测代码

代码层   • 统计内存分配相关函数的执行情况,检测内存泄漏


      • 探索运行的所有逻辑,保证功能测试全面,追求零bug

逻辑层   • 统计逻辑运行情况


      • 比较数据和代码的关联,获取bad case

接口层   • Diff测试。从大数据中取样本测试数据,自动生成测试用例
代码层功能
• Q3完成。可以直接生成单测用例,RD和QA
  只需要挑选即可
• 跟PS合作开发,已经完成demo
逻辑层功能
•   分析运行逻辑
•   找到漏测
•   分析全部的路径
•   了解运行场景

• 获得所有预期和非预期情况,然后测试
• 零故障保证的重要手段
QS系统的运行图
Image系统的运行图
扩展机制
• GDBTest支持扩展机制
• 目前提供了如下扩展

• CmdAddon:
• 可以在每个断点自动执行命令,也可以导
  出数据
• TcPathAddon:与自动化结合,运行每个用
  例,然后检查用例的执行代码路径
CmdAddon示例
• 在当前目录下写入一个cmd.sh文件
• 运行gdbtest
• 在每个断点执行的时候,都会执行cmd.sh

• 应用场景:
• 在cmd.sh中写入ps –o rsz –p 3467 输入特定进程
  的内存大小
• Gdbtest就可以输出每行代码执行时内存的增长
  情况
GDBTest的意义
• 新技术把调试技术应用与测试之中
• 带来了非常多的惊喜
• 是继单元测试后的又一次测试技术革命
其他辅助测试工具
•   Cppcheck
•   Errhunter(静态扫描)
•   Valgrind(检测内存泄漏,多线程死锁)
•   Hudson (全功能自动化的测试流程)
•   Bashgems(一体化的集成工具包)
Bashgems框架
bashgems
• 设计参考rubygems机制
• 可以通过这个框架一键式的安装使用常用
  工具
• 类似于jumbo
• QA的所有重要工具都在此框架内。包括单
  测框架,errhunter,valgrind等众多工具
• 提供了一些优秀的shell扩展
扩展命令
• Ps的增强版,可以查看常用的各种指标,比
  如线程数,内存大小等

• Exscreen 一个screen的扩展版本,提供了较
  好的界面,可以更好的管理多窗口。同时
  可以支持窗口共享,适合多人异地调试。
Valgrind的使用
• Bgem –use valgrind就会自动下载valgrind,
  加载扩展功能
• 为了简化valgrind的使用,提供了一些脚本
  扩展
• Val_xxx系列功能,已经设置好valgrind的有
  用参数,直接运行待测程序即可。
• Gdbtest在内存泄漏检测方面比valgrind更精
  准
Hudson全功能脚本
•   只需要提供代码svn地址和版本号即可
•   自动下载代码,构建依赖环境
•   自动执行一些测试过程
•   是hudson的shell版本执行工具
•   还在继续完善中
全部章节梳理
• 调试技术
• GDB与GDBTest介绍
• Bashgems测试辅助工具包
质量保证的重要手段
•   推动单测,提升底层代码质量
•   持续集成,尽早发现问题
•   接口层测试,保证需求功能正确
•   调试自动化,挖掘测试场景,问题定位,
•   线上引流。建立质量监控体系
QA转型
• 自动化与数据化带来的挑战

• QA提供质量保证的体系
• 持续集成,预上线体系、线上监控体系,测试
  用例自动生成,结果自动分析,性能测试
• 评估、监控、发现

• RD,PM去验证问题,解决问题
• 根据QA提供的场景分析,数据分析,用例分
  析来判断是否符合预期,并进行相应的处理
Thanks
• FAQ

Weitere ähnliche Inhalte

Ähnlich wie 调试技术的应用

淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless Rick Hwang
 
[students AI workshop] Pytorch
[students AI workshop]  Pytorch[students AI workshop]  Pytorch
[students AI workshop] PytorchTzu-Wei Huang
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 
高级服务器设计和实现3
高级服务器设计和实现3高级服务器设计和实现3
高级服务器设计和实现3Feng Yu
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdfbj_qa
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发Trinea Trinea
 
如何选择 Docker 监控方案
如何选择 Docker 监控方案如何选择 Docker 监控方案
如何选择 Docker 监控方案Leo Zhou
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版Kirk Chen
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
北京 Docker 容器大会分享
北京 Docker 容器大会分享北京 Docker 容器大会分享
北京 Docker 容器大会分享杨文 陈
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 

Ähnlich wie 调试技术的应用 (20)

Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 
[students AI workshop] Pytorch
[students AI workshop]  Pytorch[students AI workshop]  Pytorch
[students AI workshop] Pytorch
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
高级服务器设计和实现3
高级服务器设计和实现3高级服务器设计和实现3
高级服务器设计和实现3
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发
 
如何选择 Docker 监控方案
如何选择 Docker 监控方案如何选择 Docker 监控方案
如何选择 Docker 监控方案
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
北京 Docker 容器大会分享
北京 Docker 容器大会分享北京 Docker 容器大会分享
北京 Docker 容器大会分享
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 

调试技术的应用