HAProxy源码探索(3):使用gdb进行调试

回顾

上一篇我们尝试编译运行了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个模式后,几乎可以和图形界面有差不多的调试体验了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,593评论 0 26
  • 菜问妈妈阅读 338评论 0 0
  • 进程地址空间 内核除了管理自身的内存外,还必须管理用户空间中进程的内存,称该内存为进程地址空间,也就是系统中每个用...
    大雄good阅读 2,579评论 0 2
  • 我是不是很贱,人家都要结婚了,我还在感慨回忆。 答案是,的确我很贱。 我只是忘不了她的好,又不敢再次靠近她,就这样...
    沉木流水阅读 654评论 0 1
  • 我相信很多时候我选择做某些事,是因为了解到一部分,对其产生了一定的兴趣,才进行了选择。而大多时候,并不能完全知晓全...
    莉莉安蓁妮阅读 830评论 0 0