Tagged in

Linux Development

fcamel的程式開發心得
fcamel的程式開發心得
Notes about software development.
More information
Followers
461
More, on Medium

gcc 展開前置處理的技巧

編譯 C/C++ 程式前,編譯器會用 C 前置處理器 (cpp, C Preprocessor) 展開 #include#define#if … 等指令後的程式碼。gcc -E 作完前置處理就會停下來,不會繼續編譯,並可配合不同參數觀看展開的內容。

保留 define 內容

gcc -E -dM 可以保留 define 內容,方便查詢原始名稱。比方說 Linux 的 system call 的錯誤值會存在 errno,是個數字。要查詢數字對到的意思,需要看 <errno.h>


在 Linux 下開發 C/C++ 的新手指南

這篇是以 2012/01 寫的文章為底,配合近年來的經驗改寫的。方法大致上和當時差不多,但寫得更有系統和正確,還有增加新資訊。

預期目標讀者會使用 Linux 基本指令,嘗試回答以下問題:

  • 如何解決 undefined symbol?
  • 如何取得更多資訊除錯?
  • 如果有效率地理解程式如何運作?

用 SystemTap 找出 TCP 如何決定 MSS 的值

先前在《TCP maximum segment size 是什麼以及是如何決定的》介紹 MSS 相關知識,最後在讀 Linux kernel原始碼的時候,有找到相關部份,但沒有往下深入。這篇透過SystemTap 嘗試追得更深入一些。

關於 SystemTap 的基本知識和安裝方法,寫在《用 SystemTap 找出送 SIGKILL 的 process》。若想進一步發揮更多功能,需要配合原始碼才行。


用 SystemTap 追踪 user space 程式執行的流程

前幾篇文章 (例一例二) 介紹用 SystemTap 追踪 kernel 內的狀態,其實用來協助了解 user space 的程式,也是相當地好用。

顯示執行的行數

除錯的時候,需要快速地掌握相關的程式碼,然後深入閱讀細節。通常可以用 gdb 設中斷點或塞入程式 log 看看執行到那些地方。視情況的複雜度,有時用 SystemTap 作更有效率。


Linux 編譯 shared library 的方法和注意事項

《Linux 執行時尋找 symbol 的流程以及 shared library 相關知識》著重在執行期 (Runtime) 的行為,這篇補充說明編譯和連結(Link) 的行為,以及用 gcc 產生 shared library 的相關指令。

static linker 和 dynamic (runtime) linker

  • static linker 負責 link 產生 shared…