测试三-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) #当条件符合时,断点