回顾
上一篇我们尝试编译运行了HAProxy的第一个版本(v1.0.0)
我们发现代码结构很简单就一个haproxy.c
,里面也就3000行代码
接下去我们会尝试用gdb调试一下这个版本
安装 gdb
sudo apt install gdb
gdb 启动 HAProxy
我们之前的执行方式是 ./haproxy -f haproxy.cfg
现在我们使用 gdb 启动 gdb --args ./haproxy -f haproxy.cfg
接下来我们就可以输入命令操控 gdb 了,详细操作请输入 help
查阅
首先 start
,得到断点在第2965行停止,查看源码,这里就是 main 函数的起点
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);
}
调试的过程中有许多技巧,比如
-
ctrl+x a
切换到 UI模式 -
ctrl+x s
切换到单键模式
切换以上2个模式后,几乎可以和图形界面有差不多的调试体验了
网友评论