一、gdb基础知识
gdb是linux环境下的代码调试工具,需要在源代码生成时候加上-g选项。
gdb调试常用高频命令:
| 命令 | 注释 |
|---|---|
| list/l | 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 |
| list/l | 函数名:列出某个函数的源代码。 |
| r或run: | 运行程序。 |
| s或step | 进入函数调用 |
| finish | 执行完当前函数返回 |
| return | 不执行完当前函数直接返回 |
| breaktrace(bt) | 查看各级函数调用及参数 |
| info(i) locals | 查看当前栈帧局部变量的值 |
| info break | 查看断点信息。 |
| print(p) | 打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
| set var | 修改变量的值 |
| quit(q) | 退出gdb |
| break(b) 行号 | 在某一行设置断点 |
| break 函数名 | 在某个函数开头设置断点 |
| continue(或c) | 从当前位置开始连续而非单步执行程序 |
| run(或r) | 从开始连续而非单步执行程序 |
| delete breakpoints | 删除所有断点 |
| delete breakpoints n | 删除序号为n的断点 |
| disable breakpoints | 禁用断点 |
| enable breakpoints | 启用断点 |
| info(或i) breakpoints | 参看当前设置了哪些断点 |
| display 变量名 | 跟踪查看一个变量,每次停下来都显示它的值 |
| undisplay | 取消对先前设置的那些变量的跟踪 |
| until X行号 | 跳至X行 |
| p 变量 | 打印变量值 |
| n 或 next | 单条执行 |
| break if | break [break-args] if (condition) break-args:main\190 \test.cpp |
二、调试
2.1未运行进程调试
gdb binFile
b xxx.cpp:n 下断点
run argv(执行文件参数) 运行程序,等待触发
2.2已运行进程调试
gdb -p [pid]
b xxx.cpp:n 下断点
c 运行程序,等待触发
三、进程状态
- Linux进程状态:R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态)
- Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可处理signal
- Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 可处理signal, 有延迟
- Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态, 不可处理signal, 因为根本没有时间片运行代码
- Linux进程状态:Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程。不可被kill, 即不响应任务信号, 无法用SIGKILL杀死
四、进阶之GDB调试原理
敬请期待
本文详细介绍GDB调试工具的基础知识和使用技巧,包括未运行和已运行进程的调试方法,进程状态解析,以及GDB调试原理的初步探讨。适用于Linux环境下进行代码调试的开发者。
3954

被折叠的 条评论
为什么被折叠?



