安装
sudo apt install gdb -y
cat >> ~/.bashrc << E
alias gdb='gdb -q'
E
cat >> ~/.gdbinit << E
set confirm off
E
基础命令
r:开始运行程序,直到断点; r xx xx传参;c继续,直到断点
n:单步调试,不会进入函数内部; s会进入函数内部
p:看变量或表达式的值,如 p name, p strlen(name);p a=5 改变变量值
b xx.cpp:6,给第6行打断点;i b :查看断点情况; d 1 删除断点号(i b查看)
fin:跳出函数; u:跳出循环
bt:查看堆栈,查看运行到哪一行
watch a: 设置观察点,当a发生变化,就打印,并停止运行;
i watchpoints:查看所有观察点;d 1:删除观察点
i locals:查看函数内所有变量值
tb:临时断点,命中一次就去除
ctrl+c:暂停程序
ptype i:查看i的类型
return -1: 结束后面的语句直接返回指定值
l: 查看代码
调试正在运行的程序
./a.out 启动程序
再开一个窗口:gdb a.out -p $(pgrep a.out)
程序就会暂停,bt查看堆栈看程序停在哪里
调试多进程
set follow-fork-mode [parent(默认)|child] 选择调试父进程/子进程
set detach-on-fork [on(默认)|off] 其他进程在调试期间运行/挂起
i inferiors 查看调试进程, inferiors 1 切换到1进程
调试多线程
i threads 查看所有线程, thread 2 切换到2线程
set scheduler-locking on(只运行调试的线程)|off
调试core文件
Core文件是的程序崩溃时内存状态dump出来的文件。可以理解是车祸现场的快照。
// ulimit -c unlimited
// sudo /sbin/sysctl -w kernel.core_pattern=./%e.core
//gdb a.out corexx