一、程序中的错误处理
在系统中定义了一个全局变量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. UNIX环境高级编程之第3章:文件I/O

    3.1 引言 文件I/O函数:打开文件,读文件,写文件 经常使用到五个函数:open, read, write, lseek, close. 本章描写叙述的函数都是:不带缓冲的I/O(unbuffer ...

  2. hihoCoder - 1079 - 离散化 (线段树 + 离散化)

    #1079 : 离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho在回国之后,又一次过起了朝7晚5的学生生活.当然了.他们还是在一直学习着各种算法 ...

  3. webService总结(一)——使用CXF公布和调用webService(不使用Spring)

    CXF和Axis2是两个比較流行的webService框架,接下来我会写几篇博客简介怎样使用这两种框架. 首先,先简介一下CXF的使用. CXF公布webService有多种方法.这里我介绍三种: 1 ...

  4. B1789 Y型项链 贪心

    想明白之后就是一道大水题,就是两两把最长公共前缀求出来,然后直接取最长的,然后就直接暴力算就行了... 题干: Description 欢乐岛上众多新奇的游乐项目让小可可他们玩的非常开心.现在他们正在 ...

  5. 最短路( spfa)

    最短路 http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2622 #include <std ...

  6. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖

    题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...

  7. [Apple开发者帐户帮助]三、创建证书(5)创建WatchKit服务证书

    WatchKit服务证书允许您使用Apple推送通知(APN)将更新推送到Apple Watch上的复杂功能. 所需角色:帐户持有人或管理员. 在证书,标识符和配置文件中,从左侧的弹出菜单中选择iOS ...

  8. Quartz实现执行任务记录数据库,方便计算任务的执行次数以及成功次数

    任务执行实体 /** * 任务执行情况详情 */ public class JobExecuteDetail implements Serializable{ /** * */ private sta ...

  9. 总结java基础

    第一章总结: 1.java的是sun公司(现甲骨文有限公司)于1995年推出的高级编程语言,java技术可以应用在几乎所有类型和规模的设备上,小到计算机芯片.蜂窝电话,大到超级计算机,无所不在. 2. ...

  10. Laravel5.1学习笔记9 系统架构1 请求生命周期 (待修)

    Request Lifecycle Introduction Lifecycle Overview Focus On Service Providers Introduction When using ...