深入Linux编程系列前言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mxgsgtc/article/details/84283832

本系列主要记载一些Linux应用编程实际项目中需要注意的事情,涉及的范围包括:

一. Linux应用工程师必要的一些内核知识,以及glibc的知识
1.1 什么是虚拟内存VMA,mmu,为什么每个程序都是4G空间,OS是如何做的(带图)
1.2 fork 到底是怎么回事儿,如何在OS上运行的(带图)
1.3 线程到底是什么,为什么应用层有线程的概念,内核层没有,线程与进程到底是什么关系(带图)
1.4 线程与进程之间的内存分布问题(带图)
1.5 认识glibc的内存管理,ubantu18.04上编译一个glibc的debug版本,了解glibc内存管理机制(带图)
1.5.1 glibc管理malloc申请内存的一些感念理解,什么事 main_prena,chunk,unlink等
1.5.2 gdb调试,malloc free 大的内存,glibc是如何管理的
1.5.3 gdb调试,malloc free 小的内存,glibc是如何管理的
1.5.4 malloc的一个小例子,理解诡异的段错误情况(printf是罪魁祸首)
1.5.5 搞清楚double free,segfault等内存错误信号,哪些是内核发出的,哪些是glibc发出的
1.6 神奇的信号机制,内核角度分析实现原理 (带图)
1.7 什么是VFS,inode (带图)
1.8 理解硬链接软连接,dup,dup2 (带图)
1.9 管道的本质 (带图)

  目的: 从内核的角度上认清:什么是线程,进程,为什么线程之间内存可相互访问,进程却不行,认清glibc是个怎么回事儿,信号实现机制等

二. 应用中出现的段错误如何调试
2.1 反汇编查找问题
2.2 coredump以及addr2line查找方法
2.2.1 动态库,静态库 为什么要strip,strip后又影响了什么,什么是导出符号,什么是本地符号等
2.2.2 add2line 应用时为什么会有"?"出现的本质原因
2.2.3 gdb调试coredump,coredump的设置
2.2.4 内核中,出现段错误时的检测位置
2.3 libsegfault.so定位,多线程系统中,coredump时如何打印出每个线程的栈空间
2.4 mprotect 的应用
2.5 electric-fence 调试内存越界
2.6 上面方法都不好使的情况下,设计一个查出内存越界的方法
2.7 如何预防段错误的发生

 目的: 能应付各种各样的段错误

三. 项目中常用的函数封装以及项目中常用的方法手段
3.1 查代码,走流程,发现一个函数被100个分支调用,怎么办,__builtin_return_address(0)
3.2.为什么要封装fopen函数,它有缺点吗?
3.3.memmove和memcpy
3.4.各种时间函数的封装
3.5 System V 与 POSIX的区别
这个系列会慢慢补充

四. 项目过程中常见的错误
这个系列会慢慢补充

猜你喜欢

转载自blog.csdn.net/mxgsgtc/article/details/84283832