HAProxy源碼探索(3):使用gdb進(jìn)行調(diào)試

回顧

上一篇我們嘗試編譯運(yùn)行了HAProxy的第一個版本(v1.0.0)
我們發(fā)現(xiàn)代碼結(jié)構(gòu)很簡單就一個haproxy.c,里面也就3000行代碼
接下去我們會嘗試用gdb調(diào)試一下這個版本

安裝 gdb

sudo apt install gdb

gdb 啟動 HAProxy

我們之前的執(zhí)行方式是 ./haproxy -f haproxy.cfg
現(xiàn)在我們使用 gdb 啟動 gdb --args ./haproxy -f haproxy.cfg

接下來我們就可以輸入命令操控 gdb 了,詳細(xì)操作請輸入 help 查閱
首先 start,得到斷點(diǎn)在第2965行停止,查看源碼,這里就是 main 函數(shù)的起點(diǎn)

int main(int argc, char **argv) {
    init(argc, argv);

    if (mode & MODE_DAEMON) {
    int ret;

    ret = fork();

    if (ret > 0)
        exit(0); /* parent must leave */
    else if (ret < 0) {
        Alert("[%s.main()] Cannot fork\n", argv[0]);
        exit(1); /* there has been an error */
    }

    /* detach from the tty */
    close(0); close(1); close(2);
    setpgid(1, 0);
    }

    signal(SIGQUIT, dump);
    signal(SIGUSR1, sig_soft_stop);

    /* on very high loads, a sigpipe sometimes happen just between the
     * getsockopt() which tells "it's OK to write", and the following write :-(
     */
    //20011216//signal(SIGPIPE, SIG_IGN);

    if (start_proxies() < 0)
    exit(1);

    select_loop();

    exit(0);
}

調(diào)試的過程中有許多技巧,比如

  • ctrl+x a 切換到 UI模式
  • ctrl+x s 切換到單鍵模式

切換以上2個模式后,幾乎可以和圖形界面有差不多的調(diào)試體驗(yàn)了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 程序調(diào)試的基本思想是“分析現(xiàn)象->假設(shè)錯誤原因->產(chǎn)生新的現(xiàn)象去驗(yàn)證假設(shè)”這樣一個循環(huán)過程,根據(jù)現(xiàn)象如何假設(shè)錯誤原...
    Manfred_Zone閱讀 16,746評論 0 26
  • 進(jìn)程地址空間 內(nèi)核除了管理自身的內(nèi)存外,還必須管理用戶空間中進(jìn)程的內(nèi)存,稱該內(nèi)存為進(jìn)程地址空間,也就是系統(tǒng)中每個用...
    大雄good閱讀 2,628評論 0 2
  • 我是不是很賤,人家都要結(jié)婚了,我還在感慨回憶。 答案是,的確我很賤。 我只是忘不了她的好,又不敢再次靠近她,就這樣...
    沉木流水閱讀 779評論 0 1
  • 我相信很多時候我選擇做某些事,是因?yàn)榱私獾揭徊糠?,對其產(chǎn)生了一定的興趣,才進(jìn)行了選擇。而大多時候,并不能完全知曉全...
    莉莉安蓁妮閱讀 868評論 0 0

友情鏈接更多精彩內(nèi)容