Linux复习_02_gdb调试&链接文件&库文件

Linux 调试工具 gdb

编译链接

gcc的可执行文件,默认是release得

release 发行版本

debug 开发版本 可调式版本。

 

ELF 文件的组成.text .data .bss(best 中间那个忘记了是啥了,space)

用 readelf -S 查看文件信息可以得知,debug版本比release版本多了一些debug信息。

 

编译过程中加入了debug信息

gcc -c main.c -g

链接不会加入debug信息

gcc -o main mian.o

调试的对象:

main.c main.o(可重定位的二进制文件) debug(这个就是调试的对象)

 

调试过程

1,显示代码

list,l     

list filename:num显示指定文件指定行附近的源代码

2,断点

b linenum 给指定行添加断点

b funactionname 给指定函数添加断点

b filenum:linenum 给指定文件指定行添加文件

d dnum 删除断点

distable 将断点设置为失效 disable 不加断点号 代表全部失效

enable 将断点设置为有效的

info b 显示断点信息

b 19 if i==5 条件断点(特定模块才暂停)

断点有类型~TYPE

3,启动

r==》启动

s==》进入函数等同于VS中F11

n==》进入下一步等同于VS中F10

finish 退出函数执行。

c 继续运行 运行到下一个断点。(执行到下一个断点或者执行完毕===》看你后面有没有断点了)。

q退出调试。

p valname 变量的值。

p &valname 变量的地址。

p *ptr 查看指针指向的地址存储的值。

int arr[10]={};
int *ptrarr=arr;

p arr 显示数据所有的元素。

p *ptrarr@num 通过指向数组的指针显示数组所有元素。

p struct_val 显示结构体变量中所有的成员值。

p struct_val.a 显示结构体变量的成员名字。

p struct_val->a 通过指针显示结构体变量某个成员的值。

p funactionname(a,b) 将函数的返回值显示出来 将函数测试运行。

 

Linux文件类型:

目录 普通 链接 管道 设备

链接文件:软连接和硬链接

软连接:相当于Windows下的快捷方式软连接和源文件使用不同的inode结点。ln -s 源文件 要创建的文件

Linux ext3 ext4 XFS 索引式文件系统(磁盘格式化时,将磁盘空间分了三个部分 inode block superblock){

superblock :存储整个文件系统的信息,包括inode&block(4k)的总量使用量剩余量。

inode:存储文件的属性信息,包括文件的权限、用户。。。。(block编号)

block:存储文件的真实内容。

}

U盘 FAT32                链接式文件系统

Windows NTFS

硬链接:相当于源文件的别名,因为链接文件和源文件使用同一个inode结点。(ls -i         可以查看文件i结点);

 

 

 

Linux(进程管理,内存管理,文件管理)很重要

 

库文件:静态库 和动态库(共享库):

静态库:(中间文件的集合)(生成的可执行文件最终执行时,并不依赖库文件)(后缀windows .lib Linux .a)

链接阶段直接将库中的内容合并到最终的可执行文件中。

动态库:(不可执行的可执行文件,不可单独执行)(库也加载到内存上,源程序执行必须依赖库)(后缀Windows .dll Linux .so)

链接阶段只在可执行文件中设置使用的库,运行时,由操作系统动态加载到内存上执行。

 

创建:

静态库:

list.c queue.c stack.c

gcc -c list.c queue.c stack.c ---->.o

ar crv libxxxx.a .o ---->libxxxxxx.a(静态库)

静态库的使用:

main.c

1,gcc -o main main.c -L(库的路径) -l(库名称 ex:xxxx)

2,gcc -o main main.c 路径/libxxxx.a

动态库:

创建:

gcc -shared -fPIC -o libxxxx.so *.c

用法:

gcc -o main main.c -L. -lxxxx(操作系统默认加载动态库路径 /lib /usr/lib)

 

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:

#include <assert.h>
void assert( int expression );

问题:(原因:操作系统默认加载动态库路径 /lib /usr/lib)

1,将lib放到lib底下去

 

2,设置环境变量,使操作系统加载时除了在默认路径下搜索,还需要到用户指定路径下搜索。

 

/root/lib

export LD_LIBRARY_PATH=/root/lib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值