这里写目录标题
案例代码
#include <stdio.h>
#include <stdlib.h>
struct st
{
int a;
int b;
};
void print_array(char* array, int len)
{
int i = 0;
for(i = 0; i < len; i++)
{
printf("array[%d]: %c\n", i, array[i]);
}
}
int main(int argc, char* argv[])
{
struct st st_temp;
int i = 0;
char array[5];
st_temp.a = 10;
st_temp.b = 11;
for(i = 0; i < 5; i++)
{
array[i] = i + '0';
}
print_array(array, 5);
for(i = 0; i < argc; i++)
{
printf("hello...argv[%d]: %s\n", i, argv[i]);
}
return 0;
}
运行中设置参数进行调试
启动gdb时制定执行文件参数
gdb --args exe paras
运行时设置参数
- 1、将断点设置在函数上 b print_array
- 2、 执行 r
- 3、设置函数运行参数set paras.
- 4、c执行
运行时指定
查看及修改运行环境
- 查看程序的运行路径
- show paths
- 查看环境变量
- show environment
- 设置环境变量
- set environment PARA=para
跳转
n(next)执行下一条语句、不进入函数内部
num 代表执行多少行
(gdb) n num
s(step)执行下一条语句、进入函数内部
在遇到函数的时候会进入函数内部
(gdb) s num
(gdb) finish 跳出来
跳出循环体
(gdb) u
跳转至某一行
(gdb)until num
查看程序运行时信息
如果你用指针(或地址)来设置观察点,一定要解引用,* 指针才是对指针所指向的变量进行观察如果不解引用,那就是对指针变量本身(地址)进行观察。另外,如果你观察一个临时变量或表达式,当它的生命周期结束的时候,对应的观察点也就失效了
(gdb)p val 打印变量 val 的值
(gdb)p &val 打印变量 val 的地址
跟踪变量变化 display
查看某个变量或表达式的值,和 p 命令类似,但是 display 会一直跟踪这个变量或表达式值得变化,每执行一条语句都会打印一次变量或表达式的值。
查看栈信息info frame\ bt
函数调用时,会在内存中产生一块栈帧 保存函数调用位置、函数参数、函数内部的临时变量
查看当前所有栈帧bt