GDB调试工具动态加载内存管理(day04)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB调试工具动态加载内存管理(day04)相关的知识,希望对你有一定的参考价值。
一、程序中的错误处理 在系统中定义了一个全局变量errno。在这个全局变量中存放着系统调用或者库函数出错的信息(错误编号)。然后根据错误编号获取错误信息。 举例说明: 打开一个文件,如果这个文件不存在,查看错误信息。 代码参见 file.c perror(3) strerror(3) #include <stdio.h> void perror(const char *s); 功能:输出一条系统的错误消息 参数: s:用户给定的字符串。 返回值: 不用返回。 补充: FILE *stdin; 标准输入 键盘 FILE *stdout; 标准输出 显示器 FILE *stderr; 标准错误输出 显示器 #include <string.h> char *strerror(int errnum); 功能:返回错误编号对应的描述信息 参数: errnum:指定错误编号 返回值: 错误号对应的错误描述信息 如果错误号没有定义,返回Unknown error nnn。 二、GDB调试工具的使用 gcc gdb bash makefile 如何使用gdb调试工具调试程序? 1、在编译链接程序的时候,加上-g/-ggdb参数。编译输出的可执行文件中包含调试信息。 tmath$ls add.c mul.c point.c test.c t_math.h tmath$gcc add.c mul.c test.c tmath$ls add.c a.out mul.c point.c test.c t_math.h tmath$ls -l a.out -rwxrwxr-x 1 tarena tarena 7332 8月 3 11:19 a.out tmath$gcc add.c mul.c test.c -g tmath$ls -l a.out -rwxrwxr-x 1 tarena tarena 9580 8月 3 11:20 a.out 2、使用gdb调试工具对带有调试信息的可执行文件进行调试 gdb a.out gdb调试命令 l list 列出程序清单 b 函数的名字或者行号 breakpoint 设置断点 r run 执行程序 p 变量名 输出变量的值 n next 下一条 s step 下一步 q quit 退出调试 int a,b,c; a=b=c=3; 函数的参数。指针类型的变量作为函数的参数。 值-结果参数。举例说明 代码参见 value.c 三、动态加载 在程序中,根据程序的需要动态加载某个库函数,这种行为称为动态加载。 系统为实现动态加载提供了以下函数: dlopen(3) #include <dlfcn.h> void *dlopen(const char *filename,int flag); 功能:加载一个动态库文件,返回一个地址 参数: filename:指定了动态库的文件名字 flag: RTLD_LAZY:懒加载 RTLD_NOW:立即加载 返回值: NULL 失败 char *dlerror(void); 功能:获取dlopen、dlclose、dlsym函数产生的错误。 参数: void 返回值: 返回一个字符串。这个字符串描述了错误产生的原因。 void *dlsym(void *handle,const char*symbol); 功能:在内存查找动态库中的symbol加载到内存的地址。 参数: handle:dlopen(3)的返回值。指定了要操作的库函数 symbol:指定了要找符号。 返回值: NULL 代表错误 返回symbol加载到内存的地址。 int dlclose(void *handle); 功能:将与handle相关的动态库文件的引用计数减1。库文件的引用计数减到0的时候,动态库从内存中卸载。移除 参数: handle:指定了要关闭的动态库。是dlopen(3)的返回值 返回值: 非0 错误 0 成功 Link with -ldl. 举例说明 动态加载的使用。将libpmath.so动态库文件加载到内存,并使用函数库中的函数。 代码参见 dynamic.c 四、内存管理 寄存器 cache 内存 硬盘 云 页 页表 页框 虚拟内存 物理内存 虚拟地址空间 物理地址 演示段错误 segment.c 总结: 一、系统中的错误处理 errno perror(3) strerror(3) 二、gdb调试工具的使用 三、动态加载 按需加载 dlopen(3) dlclose(3) dlsym(3) 四、内存管理基础 页 页表 页框 物理内存 虚拟内存 虚拟地址 物理地址 在有操作系统的机器上,cpu能看到的是虚拟地址
以上是关于GDB调试工具动态加载内存管理(day04)的主要内容,如果未能解决你的问题,请参考以下文章
Linux系统开发工具(下) {调试器gdb,自动化构建工具make/Makefile,多文件编译,代码管理平台git}
C/C++3C基础:结构体,格式化输出,/main函数参数,动态内存,/文件,目录,时间操作,/系统错误信息,编译预处理,/gdb调试,makefile