DebugHacks 2018 程序啪啪啪
DebugHacks
思路图
- Image
- Invoke API
- Debug API
- valgrind
- dump
- System status API
- proc
- sys
- System API
- Invoke function
- Debug API
- 目录
- http://book.douban.com/subject/6799412/
心得
- 复现
- 之前
- 配置环境
- 听取发现人的意见(先自己总结)
- 再次检查环境
- 之后
- 确认现象
- 确认复现率和时间
- 之前
- 分析时
- 目视确认现象
- 尽量缩小范围
- 根据内核配置、内核启动参数划分问题
- 根据版本划分问题
- 通过其他方法确认
- lsusb
- lsof
- ip
- route
- 根据事实做出判断
- 问题原因不明
- 怀疑硬件问题
- 找找以前改正的同类错误
- 无法复现、原因不明
- 增加log、方便下次定位
- 为bug发生做准备
- log
- abort
- assert
- 跟同事讨论
- 咨询社区
Basic
- CoreDump
- OpenUse
- ulimit -c unlimited
- ulimit -c 1024
- ./a.out
- file core*
- gdb -c core.xxxx ./a.out
- OpenSystem
- Space
- ToSpecialDir
- tar
- MaskSharedMemoryDump
- OpenUse
- gdb
- run
- break
- function
- line-number
- file:line
- file:function
- +offset
- -offset
- *addr
- backtrace
- info reg
- continue
- next
- step
- set variabel var=exptr
- generate-core-file
- attach
- break xxx if exptr
- ignore breakpoint-number times
- clear
- all(no arg)
- function
- line
- file:line
- file:func
- delete bpn
- disable
- all(no arg)
- bpn
- display xxx
- mem
应用程序调试
- SIGSEGV
- 系统层面的signal
- Maybe
- StackOverflow
- WrongAddressAccess
- NULL-pointer
- Wrong-Pointer
- OutOfBound-Memory
- backtrace无法显示
- Reason
- 程序栈被破坏
- so没有源程序
- Find
- 根据被破坏的数据内容,查找执行写入的位置,看看有没有对栈空间(局部变量)的引用、指针传递处理
- Reason
- watch *addr
- malloc/free
- MALLOC_CHECK_
Android系统死机调试
- 发生死机时的测试
- 看屏幕与按键是否有反应
- 电话可否打入
- USB可否连接
- USB测试
- 是否有事件产生
- 系统状态
- CPU
- Memory
- Mount size
- SystemServer状况
- 信号级别调试
Unix
- Crash
- Core dump
- ulimit
- 设置和查看用户的使用的资源限制情况
- 内存泄露
- Purify
- valgrind
- free
- 性能不满足预期
- prtdiag
- prstat
- top
- ps
- ps -e -o user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
- 句柄泄露
- iostat
- 报告中央处理单元(中央处理器)统计和输入 / 输出设备和分区统计
- lsof
- iostat
- Others
- nm
- 显示目标文件的符号表信息
- ldd –显示动态库的依赖信息
- pstack(Solaris, Linux), procstack(AIX)– 打印十六进制地址和符号名称
- pmap(Solaris, Linux), procmap(AIX) –打印地址空间映射
- pldd(Solaris), procldd(AIX) —列出进程加载的库
- pfiles(Solaris), procfiles(AIX)– 报告有关的所有文件描述符
- prstat(Solaris), ps -e -o user,pid,ppid,tid,time,%cpu,cmd –sort=%cpu(Linux)– 检查每个线程的处理器
- pwdx(Linux,Solaris) pid 显示当前工作目录
- nm
tools
- strace
- std:run with kernel invoke
- -i: run with addr
- gdb break by addr
- -p pid
- objdump
- valgrind
- check
- memory leak
- wrong address access
- read uninited memory
- access free mem
- double free
- stack error opt
- check
tags: Tool
创建@
2012-09-16
最后修改@
2014-01-01