Linux高并发服务器开发 第九天(gdb调试器/基础指令 栈帧)
目录
1.gdb调试器
1.1要求
1.2基础指令
1.3其他指令
2.栈帧
1.gdb调试器
1.1要求
- 程序必须是自己编写的(能完全看懂)。
- 只能用来调试逻辑错误!
- 必须添加 -g 参数,使用 gcc 编译生成的可执行文件,才能调试!
1.2基础指令
- -g:必须使用该参编译可执行文件,否则没有调试表!
- gdb ./a.out
- l/list: list 1 列出源码,根据源码指定行号设置断点。 1 代表从第1行开始。
- b(break): b 55 在第55行添加断点。 b main 在main函数位置添加断点。 b add 、b sub...
- run/r : 运存程序,启动调试!
- 代码会自动运行,停止在断点处。断点对应的代码行,没有执行!
- n(next): 下一条指令(不进入函数,执行完之后直接跳过)
- s(step): 下一条指令(进入函数)
- p(print): 打印变量值。 如: p var ----- 查看 var 变量的值。
- continue: 继续执行断点后续的指令
- finish:结束当前函数调用。
- quit:退出当前gdb调试。
1.3其他指令
- start:不使用断点,直接启动程序,开始单步调试。
- run/r:找出程序出现段错误的位置 。用法:gdb启动调试,直接run 。停止的位置,就是出段错误的代码位置。
- 设置main函数命令行参数:
1. set args 参1 参2 参3 。。。 ( 在 start/run 之前设置。)
2. run 参1 参2 参3 。。。
- info b : 查看断点信息表
- b 23 if i = 5 :设置条件断点。 只有满足该条件时,断点才生效
- 设置 断点生效、失效。
- disable 2 : 设置编号为 2 号的断点,失效。 使用 info b 查看。
- enable 3 : 设置编号为 3 号的断点,生效。 使用 info b 查看。
- delete 1 : 删除 编号为 1 号的断点。
- ptype : 查看变量类型
- display:设置跟踪变量。如:display i。 跟踪i变量
- undisplay:取消跟踪变量。使用跟踪变量的编号。 如: undisplay 2 : 取消 2 号变量的跟踪。
- bt:列出当前程序,正存活着的栈帧。
在第54行打上断点 b 54
- frame:根据栈帧编号,切换栈帧。
2.栈帧
栈帧:用来给函数调用提供空间,保存局部变量和临时值。形参和局部变量地位等同。