回顧
上一篇我們嘗試編譯運(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)了