第10课:自定义 GDB 调试命令
在某些场景下我们需要根据自己的程序情况制定一些可以在调试时输出程序特定信息的命令这在 GDB 中很容易做到只要在 Linux 当前用户家home目录下如 root 用户是 “/root” 目录非 root 用户则对应 “/home/ 用户名”目录。在上述目录中自定义一个名叫.gdbinit文件在 Linux 系统中以点号开头的文件名一般都是隐藏文件因此.gdbinit也是一个隐藏文件可以使用ls -a命令查看a的含义是all的意思即显示所有文件当然也就包括显示隐藏文件如果不存在使用vim或者touch命令创建一个就可以然后在这个文件中写上你自定义命令的 shell 脚本即可。以 Apache Web 服务器的源码为例Apache Server 的源码下载地址请点击这里在源码根目录下有个文件叫 .gdbinit这个就是 Apache Server 自定义的 GDB 命令# gdb macros which may be useful for folks using gdb to debug # apache. Delete it if it bothers you. define dump_table set $t (apr_table_entry_t *)((apr_array_header_t *)$arg0)-elts set $n ((apr_array_header_t *)$arg0)-nelts set $i 0 while $i $n if $t[$i].val (void *)0L printf [%u] %sNULL\n, $i, $t[$i].key else printf [%u] %s%s [%p]\n, $i, $t[$i].key, $t[$i].val, $t[$i].val end set $i $i 1 end end # 省略部分代码 # Set sane defaults for common signals: handle SIGPIPE noprint pass nostop handle SIGUSR1 print pass nostop