-
在gdb里面 你输入bt命令就会显示当前函数堆栈
假如你是从main函数调用了一个函数add(),在函数add()中又调用一个minus()的,你在进入minus函数输入bt,就会显示:
#0 minus()....
#1 ...add()...
#2 ...mian()... //..是省略了一些东西
此时你输入f0 就是进入 minus的堆栈; f1是进入add()的堆栈...
如果我答的没有错的话。。
3-1gdb工具的使用 课程有讲。
查看全部 -
栈先进后出
查看全部 -
代码段里先声明的地址小后大, 栈相反
查看全部 -
pa pb指针类型 保存内存地址 占8字节
查看全部 -
pa 只是个代号, *pa=&a后
打印pa得到0x7fffffffddfc这个地址是a所在的地址
打印&pa得到0x7fffffffde08这个是pa本身的地址
查看全部 -
栈在高地址
查看全部 -
chengxu2
查看全部 -
chengxu
查看全部 -
12345
查看全部 -
GDB工具
s:执行一行代码(若有函数调用进入该函数)【Step Into】
n: 执行一行代码(函数调用一并执行)【Step Over】
p<变量名>:显示变量的值
q:退出
l:(list)列出源码
查看全部 -
1 指针 数组 字符串
2 堆内存 栈内存
3 GDB 调试工具
查看全部 -
指针变量其实代表的是地址,加*表示取这个地址的值查看全部
-
64位操作系统 c语言 指针类型变量 占用8字节内存空间
32位 占用4字节
根据内存地址。内存地址从大到小依次为系统内核,栈,堆,数据段,代码段
代码段地址,先证明的函数内存地址低, 后声明的函数内存地址高
栈段地址, 在函数被调用时分配内存地址,后进先出,先调用的函数内存地址高,后调用的函数内存地址低;
数据段地址, 存放全局变量, 静态变量,使用低位地址。
查看全部 -
gdb 终端调试工具
gcc -g main.c -o main.out 生成可调式的执行文件
注意,此时源代码.c文件仍不可删除。否则仍然不支持调试。
调制过程:
1、 gdb main2.c 进入调试模式;
2、调试模式 输入 “list” 或者 “l” 列出当前项目的软件源代码;
3、“start” 开始调试,默认断点在main函数的第一行代码;
4、"p" 表示print , 输出变量值;
5、“n" 表示执行一行代码挑到下一行;
6、 “s” 表示按步骤执行代码, 可进入调用函数内部;
7、“bt” 表示显示函数堆栈, 可显示有哪些函数在运行;此时使用"p"打印的是当前函数中的变量值, 即标号为#0的函数;
8、"f" 切换当前跟踪的堆栈内函数; eg: f 1(1 为“bt”中的函数编号);
9、“q”跳出调试模式;
查看全部 -
int *a int* a 均是合法的指针变量定义方式
int *a = &b; // 表示将变量b的内存地址保存到指针类型变量a中;
printf("%d", *a); // *a 表示(a=0x7ffffffffe4c0)这个地址中保存的值,即变量b的值;a本身为内存地址 用16进制数表示。
& 符 表示取地址
函数指针:
eg:
//定义函数 参数:int型, 返回值:int型 int quadrate(int a ){ ..... } //定义函数指针类型变量 pq指向函数quadrate, 返回值类型+参数类型都需要对应 int (*pq)(int a) = &quadrate; int s = (*pq)(3); //通过pq指针变量调用函数 quadrate
函数指针变量保存的是,函数的代码段内存地址, 使用(*pp)调用时, 程序即应用代码段内存中的内容处理参数。
查看全部
举报