本次讲解一下在gdb中如何使用打印的功能
#include <stdio.h>
int func()
{
int p = 0;
int q = 0;
for(p = 0; p < 5; p++)
{
q++;
printf("p = %d\n", p);
printf("q = %d\n", q);
}
return 0;
}
int main()
{
int i = 1;
i = i + 1;
printf("func= %s, line= %d, i= %d\n", __func__, __LINE__, i);
func();
i++;
printf("func= %s, line= %d, i= %d\n", __func__, __LINE__, i);
return 0;
}
1 打印命令 print 简写p
在for循环内第12行设置一个断点
运行效果:
使用p命令打印变量q的值
可以看到q的值为1。
常用的输出格式有以下几种:
x: 十六进制格式
d:有符号的十进制整数格式
u:无符号的十进制整数格式
o:八进制整数格式
t:二进制整数格式
c:字符格式
f:浮点数格式
例如:打印出十六进制格式
P/x 变量
2 打印命令display
(1)display 命令也用于打印变量的值
display 变量
display 命令和 print 命令的区别是,使用display会在程序每次运行到此断点后都会打印出变量的值。
例如在程序的第12号打断点,运行到断点处,用display打印p q 的值
可以看到输入displayp后,会打印出p的值,冒号前面为序号。在使display使能或不使能的时候会用到。
使用c命令使程序继续运行后,又运行到断点去,此时的现象为:
可以看到p 和 q的值被自动的打印出来。
(2)使用disable 使display命令暂时失效
格式: disable display 序号
例如,使序号1暂时取消打印,也就是不打印p的值,可以看到继续运行后只打印了序号2中的q的值。
(3)使用enable 使失效的display 重新使能
格式:enable display 序号
(4)使用delete删除指定的显示数据的序号
格式delete display 序号
例如删除序号为2的打印,也就是不打印q的值
undisplay命令与delete命令功能相同
(5)使用info命令查看display相关的信息
格式:info display
可以看到序号2已经不存在了,因为之前我们用delete命令删除了。
现在可以看到序号1,为不使能状态,打印的为变量p的值。
3 用whatis命令查看变量或表达式的数据类型
格式:whatis 变量或表达式