工程中,经常用gdb调试bug,谈谈其适用性和不适用性。
适合的场景:
1)验证程序的逻辑
给定条件,得到正确的结果
2)查看现场
各种全局、局部变量,对象的值
寄存器、内存
调用栈
不适合的场景:
1)每次crack现象不一样的场景,即异常产生的场景不能反映导致异常的原因
可能造成的原因:
a) 不正当使用系统函数,会导致系统进入无法预知的状态
中断服务程序里写log
b) 栈溢出
程序调用导致栈溢出
c) 野指针
指针定义后没有初始化,free后没有设置成NULL,
写访问这样的指针,会导致异常
2)线程间访问共享资源
共享资源当前状态不能反映正确场景,导致程序逻辑错误