Linux 开发工具 ---gcc makefile gdb

gcc

  • gcc -c -S -E -Wall -L -I -l
  • 生产静态库 将.o文件 归档生存.a文件

    ar rcs libhello.a hello.o
    ar:是gun归档工具 rcs:replace and create

  • 使用静态库方法:
    1.直接将相应的.a文件放到编译过程中
    gcc -Wall main.o libhello.a -o main
    2.使用-l选项(可能需要指定-L选项)
    gcc -Wall main.o -o main -lhello
  • C_INCLUDE_PATH CPP_INCLUDE_PATH LIBRARY_PATH
  • 生成共享库
    gcc -shared -fPIC hello.o -o libhello.so
    -shared:表示生成共享库
    -fPIC:表示产生位置无关码(position independent code)
  • 三种方式可以使共享库全局有效
    1.拷贝到系统共享库目录中/usr/lib /usr/local/lib
    2.更改LD_LIBRARY_PATH
    3.ldconfig 配置ld.so.config,ldconfig 更新ld.so.cache
  • ldd 查看所使用的库

Makefile

  • 通过添加.PHONY显示指定伪目标
    .PHONY clean
  • $@ 表示规则的目标名
  • $< 规则的第一个依赖文件名
  • $^ 规则的所有依赖文件列表
  • 不想让Makefile 信息打印出来使用@
    @echo “hello” #这条语句久不会打印出来
  • 隐含规则:将同名的.c文件生成同名的可执行文件
  • 模式规则:%.o:%.c 或者 后缀规则:.c.o: –>将.c文件生成相应的.o文件

常用的内嵌函数
  • 函数调用 $(function arguments)
  • $(wildcard PATTERN) 当前目录下匹配模式的文件
    eg: SRC=$(wildcard *.c)
  • $(patsubst PATTERN,REPLACEMENT,TEXT) 模式替换函数
    eg: $(patsubst %.c,%.o,$src) 等价于$(src:.c=.o)
  • shell 函数 执行shell命令eg:$(shell ls -d */) 列出按当前文件夹下的所有文件夹

TARGET=$@
-C 跳转到指定目录下之行相应的Makefile

gdb

  • until
  • finish
  • info b
  • set args r a b c 传入a b c
查看源代码
  • list 查看最近10行 list 1 ; list 1,10 ; list ,15 ;
  • list fun 查看fun函数源代码
  • list file:fun 查看file文件的fun函数代码
断点与观察点
  • break 行号
  • break fun
  • break file:行号
  • break file:fun
  • break if 条件成立时程序停住
  • info break
  • watch expr 表达式 expr值发生改变,程序停住
  • delete n 删除断点
单步调试
  • continue
  • step ->step in
  • next ->step out
  • finish 运行完当前函数完成返回
  • until 运行程序直到退出循环体
查看运行时数据
  • print
  • ptype 查看类型
  • print array
  • print *array@len 查看动态内存
  • print x=5 改变运行时数据
调试段错误
  • 访问非法地址导致段错误
    1.访问系统数据区,尤其是系统保护的内存地址写数据,最常见的是0地址
    2.内存越界(数组越界,变量类型不一致等)访问到不属于你的内存区域
  • 程序报段错误会自动停下来,然后用bt查看栈回
core文件调试
  • 在程序崩溃时,一般会产生一个core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫core dump
  • 设置生成core文件
    ulimit -c 查看core-dump状态
    ulimit -c 数字
    ulimit -c unlimited
  • gdb 利用core文件调试
    gdb 可执行文件名 此可执行文件产生的core文件
    bt
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值