GDB调试工具、动态加载、内存管理(day04)
一、程序中的错误处理
在系统中定义了一个全局变量errno。在这个全局变量中存放着系统调用或者库函数出错的信息(错误编号)。然后根据错误编号获取错误信息。 举例说明: 打开一个文件,如果这个文件不存在,查看错误信息。 代码参见 file.c perror() strerror()
#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调试工具调试程序?
、在编译链接程序的时候,加上-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 tarena tarena 8月 : a.out tmath$gcc add.c mul.c test.c -g
tmath$ls -l a.out
-rwxrwxr-x tarena tarena 8月 : a.out 、使用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=;
函数的参数。指针类型的变量作为函数的参数。
值-结果参数。举例说明 代码参见 value.c 三、动态加载
在程序中,根据程序的需要动态加载某个库函数,这种行为称为动态加载。
系统为实现动态加载提供了以下函数:
dlopen()
#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()的返回值。指定了要操作的库函数
symbol:指定了要找符号。
返回值:
NULL 代表错误
返回symbol加载到内存的地址。 int dlclose(void *handle);
功能:将与handle相关的动态库文件的引用计数减1。库文件的引用计数减到0的时候,动态库从内存中卸载。移除
参数:
handle:指定了要关闭的动态库。是dlopen()的返回值
返回值:
非0 错误
成功 Link with -ldl. 举例说明 动态加载的使用。将libpmath.so动态库文件加载到内存,并使用函数库中的函数。 代码参见 dynamic.c 四、内存管理 寄存器
cache
内存
硬盘
云 页 页表 页框 虚拟内存 物理内存 虚拟地址空间 物理地址
演示段错误 segment.c 总结:
一、系统中的错误处理
errno perror() strerror() 二、gdb调试工具的使用
三、动态加载
按需加载 dlopen() dlclose() dlsym() 四、内存管理基础
页 页表 页框
物理内存 虚拟内存 虚拟地址 物理地址
在有操作系统的机器上,cpu能看到的是虚拟地址
GDB调试工具、动态加载、内存管理(day04)的更多相关文章
- Unity动态加载和内存管理(三合一)
原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...
- QT/C++插件式框架、利用智能指针管理内存空间的实现、动态加载动态库文件
QT.C++插件式框架.主要原理还是 动态库的动态加载. dlopen()函数.下面为动态加载拿到Plugininstance对应指针.void**pp=(void**)dlsym(handle,&q ...
- 利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载
简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器. 好,来复习一下 01 one(); 02 03 function one ...
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
- (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】
原文地址:http://www.cnblogs.com/melonblog/archive/2013/05/09/3062303.html 原文作者:豆浆油条 - melon 本文示例代码测试环境是W ...
- CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类
以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...
- 动态加载框架DL分析
动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...
- Android 插件开发,做成动态加载
为什么需要插件开发: 相信你对Android方法数不能超过65K的限制应该有所耳闻,随着应用程序功能不断的丰富,总有一天你会遇到一个异常: Conversion to Dalvik format fa ...
- Android中的动态加载机制
在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...
随机推荐
- ipcs命令学习
参考这篇 http://blog.csdn.net/pyjfoot/article/details/7989097 ipcs -m -s -q 分别对应集中ipc ipcs -l 显示limits: ...
- Spring 计时器 @Scheduled cron 含义
Spring 计时器 @Scheduled cron 含义 学习:http://blog.csdn.net/prisonbreak_/article/details/49180307 http://b ...
- 点评国内各大在线app生成平台
第一个:应用之星-无需编码的在线手机应用开发平台-移动开发平台-Androi应用开发 应用之星是免费的无需编码.基于组件的在线手机应用开发平台,app软件开发平台,手机软件开发平台,为移动开发人员减少 ...
- windows server使用 LetsEncrypt-Win-Simple来安装和使用用Let's Encrypt免费SSL证书
一.网站部署 LetsEncrypt-Win-Simple可以自动发现已经部署的网站供我们选择要生成证书的网站,而且还需要进行验证.所以在生成证书之前,确保网站已经部署好并可以正常访问. 二.生成证书 ...
- Linux vs Window
目前国内Linux更多的是应用于服务器上,而桌面操作系统更多使用的是Window.主要区别如下: 比较 Windows Linux 界面 界面统一,外壳程序固定所有Windows程序菜单几乎一致,快捷 ...
- warning: here-document at line 7 delimited by end-of-file (wanted `rui')
- Flink之DataStreamAPI入门
目录 Types Transformations Defining UDFs 本文API基于Flink 1.4 def main(args: Array[String]) { // 第一种会自动判断用 ...
- 最新昆石VOS2009/VOS3000手机号段导入文件(手机归属地)
使用2017年4月最新版手机号段归属地制作,支持所有版本的VOS 共360569条记录,兼容所有版本的昆石VOS,包括VOS2009.vos3000.vos5000 导入比较简单.下载后解压到桌面在V ...
- King(差分约束)
http://poj.org/problem?id=1364 题意:输入i,n,gt(lt),k; 判断是否存在这样一个序列,从第 i 项加到第 n+i 项的和 <(lt) k 或 >(g ...
- centos的vsftp修改上传下载速度
比如你想限制本地用户的上传速度和下载速度为1MB/s,则在vsftpd.conf中添加以下内容:local_max_rate = 1048576 ※ 默认单位是Byte/s