测试三-gdb测试

测试三-gdb测试

用gcc -g编译附件代码

gcc -g testgdb.c -o testgdb
#使用gdb启动程序
gdb ./testgdb

在main函数中设置一个行断点

(gdb) break 5

修改循环次数为自己学号后4位,设置一个约为学号一半的条件断点

#include <stdio.h>

int sum(int m);

int main()
{
    int *pi;
    int i, n = 0;
    pi = &i;
    int arr[3] = { 10, 20, 30 };
    pi = arr;
    sum(50);
    for (i = 0; i <= 2826; i++) {
	    n += i;
    }

    printf("The sum of 1-2826 is %d \n", n);
}

int sum(int m)
{
    int i, n = 0;
    for (i = 1; i <= m; i++) {
	    n += i;
    }

    printf("The sum of 1-50 is %d \n", n);

    return n;
}
#条件断点,当i等于1413时在14行中止
(gdb) break 14 if i==1413

设置断点

#运行
(gdb) r
#继续运行
(gdb) continue
#清除所有断点
(gdb) delete
#清除断点1
(gdb) delete 1
#展示变量
(gdb) display 变量名
#退出gdb模式(快捷键)
ctrl+d/q

其他类型断点

数据断点

根据地址来进行设置断点,只能是在debug程序运行之后设置,因为只有运行后,你才能很方便地获知变量的地址。当该地址上的内容发生改变时就会触发断点。
设置数据断点有两种方式,一种是直接指出地址值,如:

(gdb) b *0x400522

注意必须加*号。而获取地址值的方法是,先设置普通断点,在断点处print &变量名 就能获取该变量的地址。
另一种是直接设置变量名了,如:

(gdb) b &变量名

函数断点

这种断点是当程序执行到某个程序时就会触发断点。设置方式如:

(gdb) b funcName

监视

监视必须是在程序运行后才行。如:

(gdb) watch *地址    # 当地址所指内容发送变化时断点
(gdb) watch var    #当var值变化时,断点
(gdb) watch (condition)    #当条件符合时,断点
posted @ 2025-01-02 11:31  Arisf  阅读(3)  评论(0编辑  收藏  举报