[Compiler 笔记 (3)]:如何使用 gdb 追 chibicc 的程式码

以前曾经学过几次 gdb,但后来却会一直觉得这个东西很难用也不知道怎么用比较好,直到最近在读 chibicc 时,刚好就有了使用 gdb 的需求,有了这个需求后,觉得用起 gdb 就比较有学习的方向,以下来纪录我是如何使用 gdb 来 debug chibicc。

下载 chibicc
git clone https://github.com/rui314/chibicccd chibicc/
编译 chibicc
make

编译好之后应该会出现 chibicc 这个档案

然后準备一个让 chibicc 做编译的简单档案 foo.c
// foo.cint foo(){    int i;    int j;    i = 3;    if (i > 0) {        j = 2;    }    return 2;}
接着可以就可以用 gdb 来 debug chibicc 了
gdb --args ./chibicc -c foo.c # 加上 --args 代表 ./chibicc 之后还有参数
强烈建议进入 gdb 之后,输入
tui enable

会出现当前在哪一行程式码的介面,这个功能可以让你的生活轻鬆许多。

可以正式开始 debug 了,我认为刚开始只需要知道以下几个指令就好,有不记得的会搭配 GDB cheatsheet 这个小抄来使用
# b <function name>         b 代表 break(中断点)程式执行时会停在这里,如(gdb) b parse                   # 可以让程式执行时停在 parse.c 里的 parse() 这个 function(gdb) r                         # 代表 run,从头开始执行的意思(gdb) n                         # 代表 next,执行下一行程式码的意思(gdb) s                         # 代表 step,遇到 function call 时,会进入到 function 里(gdb) c                         # 代表 continue,一直执行到结束,但如果遇到中断点会停下(gdb) p <var>                   # print 出一个变数的值
gdb 的设定档 .gdbinit 以及针对 chibicc 的设定
./chibicc 这个资料夹下,建立一个 .gdbinit 的档案,如此一来在执行 gdb 时就会自动的载入设定档了
# .gdbinittui enable                  # 使用 tui modeset follow-fork-mode child  # 当 fork() 时,选择追蹤 child process 而非 parent process 这是为了 chibicc 而做的设定

再执行 gdb --args ./chibicc -c foo.c 之后,会发现会出现像这样的错误:

...To enable execution of this file add        add-auto-load-safe-path /home/username/chibicc/.gdbinitline to your configuration file "/home/username/.gdbinit"....

照着上面说的做就好,在 /home/username/.gdbinit 这个档案中加入一行 add-auto-load-safe-path /home/username/chibicc/.gdbinit 就可以了


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章