栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux 动态库和GDB的使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 
#include 
#include 

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 %sn", argv[1], argv[2]);
        printf("%d + %d = %dn",a, b, add1(a, b));
        printf("%d - %d = %dn",a, b, sub1(a, b));
        printf("%d / %d = %dn",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调试

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号