一、程序中的错误处理
在系统中定义了一个全局变量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)的更多相关文章

  1. Unity动态加载和内存管理(三合一)

    原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...

  2. QT/C++插件式框架、利用智能指针管理内存空间的实现、动态加载动态库文件

    QT.C++插件式框架.主要原理还是 动态库的动态加载. dlopen()函数.下面为动态加载拿到Plugininstance对应指针.void**pp=(void**)dlsym(handle,&q ...

  3. 利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载

    简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器. 好,来复习一下 01 one(); 02 03 function one ...

  4. Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  5. (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】

    原文地址:http://www.cnblogs.com/melonblog/archive/2013/05/09/3062303.html 原文作者:豆浆油条 - melon 本文示例代码测试环境是W ...

  6. CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类

    以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...

  7. 动态加载框架DL分析

    动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...

  8. Android 插件开发,做成动态加载

    为什么需要插件开发: 相信你对Android方法数不能超过65K的限制应该有所耳闻,随着应用程序功能不断的丰富,总有一天你会遇到一个异常: Conversion to Dalvik format fa ...

  9. Android中的动态加载机制

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

随机推荐

  1. HYAppFrame(WinForm框架源代码)安装部署指南

    HYAppFrame是一款基于Win form的应用程序框架,包括serverWeb Service.主程序框架.组织架构.权限控制.菜单导航.基础数据.系统參数.日志管理.定时任务等. 项目地址:h ...

  2. POJ 2411 插头DP

    //插头DP,算是广义路径的吧. /* 我是这样想的,定义填数的为0,未填的为1.然后,初始自然是(0,0).我还定义了整个棋盘的状态,不知是否多此一举. 这样,把轮廓线上的格子状态记录.当(I,J) ...

  3. springmvc 处理lsit类型的请求參数映射成实体属性

    <table align="center" cellspacing="10"> <tr> <td> 母码数目:<inp ...

  4. hibernate 普通字段延迟载入无效的解决的方法

    关联对象的延迟载入就不说了.大家都知道. 关于普通字段的延迟载入,尤其是lob字段,若没有延迟载入,对性能影响极大.然而简单的使用 @Basic(fetch = FetchType.LAZY) 注解并 ...

  5. uiautomator +python 安卓UI自动化尝试

    使用方法基本说明:https://www.cnblogs.com/mliangchen/p/5114149.html,https://blog.csdn.net/Eugene_3972/article ...

  6. nginx+tomcat反复请求

    好久不写技术文章了,越发的认为单纯的讲技术没啥意思.怪不得知乎越来越火.由于大家都喜欢看故事.不喜欢硬生生的技术文章.笔者今天就来就给大家讲故事:) 近期站点压力突然增大,把带宽都占满了,訪问网页发现 ...

  7. 简化bigdecimal计算的小工具类

    简化bigdecimal计算的小工具类 如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果( ...

  8. Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465439  Android系统Recovery工作原理之使用update.zip升级过程分 ...

  9. 蓝桥杯--2011--购物券(dfs)

     公司发了某商店的购物券1000元,限定只能购买店中的m种商品.每种商品的价格分别为m1,m2,-,要求程序列出所有的正好能消费完该购物券的不同购物方法. 程序输入: 第一行是一个整数m,代表可购 ...

  10. 用SQL实现统计报表中的“小计”和“合计”

    问题: 开发一个关于各烟叶等级的二次验级的原发件数.原发重量及验收重量的统计报表.其中,原发件数.原发重量和验收重量等列要求计算出各等级组别的小计和所有记录的合计. 语句: SELECT DECODE ...