欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Linux动态库和GDB的使用

时间:2023-06-25
Linux 动态库和GDB的使用 1.动态库的定义

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

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

2.动态库的生成和使用

gcc demo.c -o demo.o -fPICgcc -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一直跟踪变量varundisplay + 跟踪变量编号取消跟踪变量varquitq退出gdb调试

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。