0. GDB常用命令
http://t.csdn.cn/zSWfV
1. core_dump
生成条件:程序异常终止且ulimit -c 参数不为0
永久生效:/etc/security/limits.conf 添加: * soft core unlimited
生成路径:
临时–>sudo sysctl -w kernel.core_pattern=/coredumps/core-%e-%s-%u-%g-%p-%t
永久–>/etc/sysctl.conf 添加:kernel.core_pattern=“/coredumps/core-%e-%s-%u-%g-%p-%t”
2. gdb调试core_dump文件
gdb [二进制运行程序] [core_dump文件]
bt:查看运行堆栈,找到报错行
3. gdb调试正在运行的程序
gdb [二进制运行程序] -p pid 注:调试时,运行程序将停在当前运行位置
4. gdb调试多进程程序
调试父进程: set follow-fork-mode parent (缺省)
调试子进程: set follow-fork-mode child
设置调试模式:set detach-on-fork [on|off] (缺省为on)
含义:当调试当前进程是,其他进程是否继续运行
查看调试的进程:info inferiors
切换调试的进程:inferiors pid
5. gdb调试多线程程序
shell命令:
1. 查看运行进程:ps aux | grep name
2. 查看运行线程:ps -aL | grep name
查看调试的线程: info threads
切换调试的线程:thread id
运行当前线程:set scheduler-locking on
运行全部线程:set scheduler-locking off
指定某个线程执行gdb命令:thread apply 线程id cmd
指定全部线程执行gdb命令:thread apply all cmd
6. gdb监视变量
info watchpoints:列出当前所设置了的所有观察点
watch <表达式>:表达式发生变化时暂停运行
awatch <表达式>:表达式被访问、改变是暂停执行
rwatch <表达式>:表达式被访问时暂停执行