GDB基本操作和常见面试题
GDB基本操作和常见面试题
基本操作
GDB是 GNU开源组织发布的一个强大的Unix/Linux下的程序调试工具。
作用:
- 1、启动用户程序后,可以按照用户的要求随意运行程序
- 2、可让被调试的程序在用户所设定的断点处停住
- 3、当程序被停住时,可以检查或者说监视此时程序中的数值。
- 4、可动态改变用户程序的执行环境
基本的操作大概有十个:
file <文件名> | 加载被调试的可执行程序文件 |
---|---|
run | 重新开始运行文件 |
start | 单步执行,运行程序,停在第一执行语句 |
list | 查看源代码,简写l |
set | 设置变量的值 |
next | 单步调试(逐过程,一行一行运行),简写n |
step | 单步调试(逐语句,跳入函数内部运行),简写s |
backtrace | 查看函数调用的栈帧和层级关系,简写bt |
frame | 切换函数的栈帧,简写f |
info | 查看函数内部局部变量的数值,简写i |
finish | 结束当前函数,返回到函数调用点 |
continue | 继续运行,简写c |
打印值及地址,简写p | |
quit | 退出gdb,简写q |
具体如下所示:
启动
gcc -g hello.c -o hello //默认得到release版本的文件
gdb ./hello //进入调试状态
但通常是生成debug版本的文件
gcc -o mytest test.c -std=c99
readelf -S mytest//查看调试信息
readelf -S mytest | grep -i debug //更加详细的调试信息
查看
| 0 //查看代码
(gbd)list 5 //显示以第5行为中心的10行代码
(gdb) list main//显示函数名为main的函数的源代码
(gdb)list - : 显示当前行前面的代码
断点
(gdb) b main :为函数打断点,在进入函数的时候停止。
b 数字(行数) //打断点
info b//找断点
d 编号 //删断点
disable breakpoint 编号 //设置空断点
enable breakpoint 编号//开启断点
n(next)//逐过程(一行一行)
s(step)//逐语句(跳入函数内部)
监视
(gdb)watch 变量名//当变量值发生变化时,自动跳转
(gdb) print /a &变量名//打印变量地址
运行
(gdb)r [run的缩写] :开始运行程序,程序运行到断点的位置会停下来,如果没有遇到断点,程序会一直运行下去。
(gdb) continue//让程序继续执行
退出
(gdb) quit : 退出gdb调试
常见面试题
gdb调试死锁
答:
ps 可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性
ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵尸 a defunct (”zombie”) process
查找僵尸进程 ps aux | grep Z
top 可以动态地持续监听进程地运行状态
netstat:显示相关网络统计信息。netstat -au展示所有udp协议,netstat -at展示所有tcp协议。
find 查找指定目录下的文件 sudo find / -name mysql.h
ps ef | grep aaaaa 文本搜索
history 查看历史命令
chmod 加权限
查进程 netstat -a | grep 9006
查看日志末尾200行 tail -200f be.info
backtrace 简称 bt,查看堆栈信息,中文是反向追踪
查看进程号
ps-ef |grep "a.out-name"
gdb 调试该进程
info thread;//查看所有进程信息,可以看到lock_wait,可能有死锁
thread 2 进入进程2
bt 查看堆栈
f 3 查看编号位置代码。
判断死锁完毕。
本文作者:我好想睡觉啊
本文链接:https://www.cnblogs.com/z-qhhh/p/17668128.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步