Linux 动态库和GDB的使用

Linux 动态库和GDB的使用

1.动态库的定义

在大型的嵌入式软件中,一般会分模块的进行开发,最终某个模块的部分会以动态库的方式给出来给需要的人调用,一般有动态库和

静态库的方式,但是静态库的占用内存太大,我们一般用动态库的方式开发。

2.动态库的生成和使用

gcc demo.c -o demo.o -fPIC
gcc -shared demo.o -o libdemo.so  //生成 libdemo.so动态库文件
mkdir include ; mkdir lib ; mv demo.h include/ ; mv libdemo.so lib/
gcc main.c -ldemo -o main -I./include -L./lib
//运行可执行文件时需要指定动态库的路径
export LD_LIBRARY_PATH=./lib

demo.h头文件

#ifndef _DEMO_H_
#define _DEMO_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int add1(int a, int b);
int sub1(int a, int b);
int div1(int a, int b);

#endif

demo.c源文件

#include "demo.h"

int add1(int a, int b)
{

        return a + b;
}

int sub1(int a, int b)
{
        return a - b;
}

int div1(int a, int b)
{
        return a /b;

}

main.c源文件

#include "demo.h"

int main(int argc, char *argv[])
{
        int a = 20, b = 4;
		
    	printf("%s %s\n", argv[1], argv[2]);
        printf("%d + %d = %d\n",a, b, add1(a, b));
        printf("%d - %d = %d\n",a, b, sub1(a, b));
        printf("%d / %d = %d\n",a, b, div1(a, b));

        return 0;
}

3.GDB的定义

GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。我们在编译程序的时候需要加上 -g 选项,系统会在编译的时候加上调试信息

1.gdb的常用命令

命令命令缩写作用
gdb + 可执行文件使用gdb调试目标程序
runr运行程序
break + nb设置断点
start运行至主函数的起始位置停下
steps单步执行,遇到函数会进入
nextn单步执行,遇到函数不会进入
run + 参数执行程序带入参数运行
set args + 参数设置带入参数的值
finishfi结束当前函数调用,回到上一层函数处
backtracebt查看当前线程调用的堆栈(栈帧)
framef + n切换到具体的堆栈处
listl查看调试源码
info bi + b查看断点信息
show args显示带入参数的值
break +n if var = n设置断点,并且设置循环的变量
delete + n删除断点(使用info break 显示的断点编号)
continue出发断点后程序继续运行
disable + n禁用某个断点
enable + n使能某个断点
until程序执行到指定位置停下来
ptype var查看变量类型
display var一直跟踪变量var
undisplay + 跟踪变量编号取消跟踪变量var
quitq退出gdb调试

打印变量值和类型时,需要运行到某个函数的栈帧上查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值