linux之gdb基本调试命令和使用总结

1、gdb调试命令

  描述
backtrace(或bt) 查看各级函数调用及参数
finish 连续运行到当前函数返回为止,然后停下来等待命令
frame(或f) 帧编号 选择栈帧
info(或i) locals 查看当前栈帧局部变量的值
list(或l) 列出源代码,接着上次的位置往下列,每次列10行
list 行号 列出从第几行开始的源代码
list 函数名 列出某个函数的源代码
next(或n) 执行下一行语句
print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
quit(或q) 退出gdb调试环境
set var 修改变量的值
start 开始执行程序,停在main函数第一行语句前面等待命令
step(或s) 执行下一行语句,如果有函数调用则进入到函数中

比如还有几个命令如下

wath     观察一个变量

current 跳转到下个断点,或则跳转到观察点

quit  退出gdb调试


二、分析例子

代码如下:

#include 


int add_range(int low, int high);

int add (int a, int b);

int add (int a, int b) {
    int result = a + b;
    return result;
}

int add_range(int low, int high)
{
	int i = 0, sum = 0;
	for (i = low; i <= high; i++)
		sum = sum + i;
	return sum;
}

int main(void)
{
	int result[100];
	result[0] = add_range(1, 10);
	result[1] = add_range(1, 100);
	printf("result[0]=%d\nresult[1]=%d\n", result[0], result[1]);
	int a = 9, b = 10;
        int result1 = a + b;
        int result2 = a * b;
        printf("result1 = %d, result2 = %d", result1, result2);
        int result3 = add(result1, result2) ;
        printf("result3=%d", result3);
        if (result3 == 10) {
           printf("result3 = %d", result3);
        } else {
           printf("result != 10"); 
	}
        return 0;
}


在编译时要加上-g选项,生成的可执行文件才能用gdb进行源码级调试:

 命令如下:

 gcc -g main.c -o hello1
 gdb hello1

如下图

linux之gdb基本调试命令和使用总结_第1张图片

然后我们怎么查看源代码呢?命令如下

list 1
linux之gdb基本调试命令和使用总结_第2张图片


然后我们还要看下面的代码可以怎么样操作,你可以  回车 或则 输入l  之后回车(因为list 简写 l)注意很多gdb命令都可以简写成首字母,或则输入 list 2 回车也可以

linux之gdb基本调试命令和使用总结_第3张图片

我们退出gdb命令如下

quit

我们这里先不退出

我们先运行程序用下面命令

start
如下图

linux之gdb基本调试命令和使用总结_第4张图片

我们用next命令执行下一条语句,next命令简写为n,输入下民命令

n

我们也可是使用step命令进入函数内入跟踪,简写命令s,再输入命令n执行下一步,输入下面命令

s

linux之gdb基本调试命令和使用总结_第5张图片

在函数中有几种查看状态的办法,backtrace命令(简写为bt)可以查看函数调用的栈帧:

可见当前的add_range函数是被main函数调用的,main传进来的参数是low=1, high=100main函数的栈帧编号为1,add_range的栈帧编号为0。现在可以用info命令(简写为i)查看add_range函数局部变量的值:

i locals

如果想查看main函数当前局部变量的值也可以做到,先用frame命令(简写为f)选择1号栈帧然后再查看局部变量:

(gdb) f 1

输入下面命令

i locals

我们还可以用p打印出当前值

linux之gdb基本调试命令和使用总结_第6张图片

我们也可以修改sum的值

set var sum = 0
linux之gdb基本调试命令和使用总结_第7张图片

比如我们不要运行这个函数了,要运行这个函数下面的程序,我们可以用finish

finish 

quit     退出命令

linux之gdb基本调试命令和使用总结_第8张图片

3、总结

      我们熟悉了gdb基本的调试命令,然后下篇博客来讲gdb怎么打断点,怎么调试,怎么watch变量。

你可能感兴趣的:(Linux,C/C++)