深入Linux程式設計系列前言
本系列主要記載一些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的區別
這個系列會慢慢補充
四. 專案過程中常見的錯誤
這個系列會慢慢補充