赞
踩
查看文件内容
cat filename
more filename
less filename
head -n filename (查看文件前n行)
tail -n filename (查看文件后n行)
编译过程中加入debug信息:gcc -c main.c -g
链接不会加入debug信息:gcc -o main main.o (-o重命名)
gdb调试
l 显示源代码(默认显示main函数所在文件的源代码)
list filename :num 显示制定文件指定行附近的源代码
b linenum 给指定行添加断点
b funactionname 给指定函数添加断点
b filename :linenum 给指定文件的指定行添加断点
b linenum if 条件
info b 显示断点信息
d bpnum 删除断点
disable bpnum 将断点设置为无效的
enable bpnum 将断点设置为有效的
执行过程控制
r 启动调试
finish 退出函数执行
q 退出调试
n 执行下一步
s 进入函数中执行
c 继续运行,运行到下一个断点处
p valname 查看变量的值
p &valname 查看变量的地址
p *ptr 指针指向的地址存储的值
p arr 显示数组所有的元素
p *ptrarr@num 通过指向数组的指针显示数组所有的元素
p struct_val 显示结构体里所有的成员值
p struct -val.a (.a 成员名)显示结构体变量中某个成员的值
p syruct→a 通过指针显示结构体变量某个成员的值
p funactionname(a,b) 将函数测试运行
bt 显示函数调用栈 函数调用流程
Linux 文件系统 EXT4 索引式文件系统
U盘 FAT32 链接式
windows NTFS
EXT4:磁盘格式化时,将磁盘空间分为三部分:inode、block、superblock
superblock:存储整个文件系统的信息,包括inode&block的总量、使用量、剩余量。
inode:存储文件的属性信息,包括文件的权限、用户……block的编号。
block:存储文件的真实内容。
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
库文件中不允许有main函数
静态库是功能代码编译完成后的中间文件的集合。
静态库的生成:
gcc -c *.c(.c文件)→*.o
ar crv libxxx.a .o(所有.o文件)→libxxx.a(静态库)
库的使用:
1、gcc -o main main.c -L(库的路径) -l(库名称)
2、gcc -o main main.c 路径/libxxx.a
特点:
1、静态库对函数库的链接是放在编译时期完成的。
2、程序在运行时与函数库再无瓜葛,移植方便。
3、浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
链接阶段仅仅是让可执行文件知道所用的功能代码在哪个库中。执行时,由操作系统将动态库单独动态加载到内存上执行。
动态库的生成:
gcc -shared -fPIC -o libxxx.so *.c
gcc -o main main.c -L(库的路径) -l(库名称)
操作系统加载动态库路径: /lib /usr/lib
1、将动态库拷贝到 /lib或者 /usr/lib (只有root用户有权限)
2、设置环境变量 使操作系统加载库时除了在默认路径下搜索
特点:
1、动态库把对一些库函数的链接载入推迟到程序运行的时期。
2、可以实现进程之间的资源共享。(因此动态库也称为共享库)
3、将一些程序升级变得简单。
4、甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。