附录 E. 调试

一般信息

调试是一项可以通过学习来掌握的技艺。教你如何写好 bug 报告的优秀材料 很有一些,在动笔前请一定要先阅读一下,bug 终究逃不掉的,何况读读材料也不会要你的命。 我们是很想除掉 bug 的,而这离不开你的帮助 :-) 那么让我们全副武装直奔战场吧。 同时介绍两篇不错的文档 Bugzilla Bug Reporting HOWTO 和 Simon Tathams 的 How to Report Bugs Effectively

鉴于有些非官方补丁的性质,我们无法逐一给予支持。 这意味着(对你而言)你应该检查一下 Fluxbox 是否 是在没有用这些补丁的情况下出现的崩溃现象。 如果采用的 Fluxbox 补丁是由发行版维护人员打上的, 你应该找他商量这个问题。

如果需要比这篇指南里提供的还要多的有关调试的帮助,你可以 看看 irc.freenode.net 的 #fluxbox 频道里的人能否帮得上忙。主开发人员和一大群 可胜任的人一般都在那儿,所以你的问题基本上都可以得到解决。

Fluxbox 相关的东西

Fluxbox 的输出信息

像其他应用程序一样 Fluxbox 从哪个控制台下启动就会把信息发送到哪里。问题是在正常情况下所有的输出信息都会流向 文本控制台。将你的 Fluxbox 启动行改为 exec xterm 或者其它你喜欢的终端模拟器。启动 X11 时 Fluxbox 就会从那个 xterm 中自动运行,仔细瞧好, 你很容易就能看到 Fluxbox 放出的信息了。

我们需要的信息

我们要知道很多东西。确保你对它们都清楚。

怎么处理 core dumps。

要是你使用 Fluxbox 的时候总是收到 core dump ,照着下面的指示来: 前往 OPN 上的 #fluxbox 频道,告诉 fluxgen(译注:fluxgen 就是 Henrik Kinnunen) 的你收到了一个 core dump。 它要什么信息你就提供给它。他可能会要你下面的事情。过程可能有些繁琐,但只要你稍微有点 常识和一些 Unix 的经验,其实并不难。对了,你需要 GNU 调试器,名称是 gdb

重新编译 Fluxbox

对,你没有看错!要成为一名真正的调试员,你必须带上调试符号重新构造一遍 Fluxbox 。

像平常那样去 Build Fluxbox,在 make 的时候加上以下选项:

    $ CFLAGS=-Wall -g3 CXXFLAGS=-Wall -g3 make

如果你使用的是 Fluxbox 站点或者你的发行版提供的源码包 RPMs,你可以这样:

    $ su
    # rpm -ivh fluxbox-0.1.11.1mdk.src.rpm
    # cd /usr/src/RPM/SPECS
    # env DEBUG=true rpm -ba fluxbox.spec
    # rpm -Uvh --force /usr/src/RPM/RPMS/i686/fluxbox*
    # exit
    $ mkdir -p ~/src/fluxbox
    $ cp -R /usr/src/RPM/BUILD/fluxbox* ~/src/fluxbox

进入 Fluxbox 目录(这样我们就不会搞错 core dump 了)。shell 有个俏皮功能用于禁止生成 core 文件。所以请确保 你真的得到了 core 文件:

    $ ulimit -c unlimited

启动 X11 让我们调试吧。怎么样可以让 Fluxbox 产生 core dump 就怎么做。 现在我们正式开始调试:

    $ gdb fluxbox core

先在 gdb (开头部分是 gdb 的提示符,不必敲入)里执行这个命令:

    (gdb) where

屏幕马上会给出许多输出。在这些信息中,凡是以 # 开头的,Fluxgen 都需要知道。

然后将它们粘贴到邮件里,并把~/.fluxbox/目录下的 4个设置文件作为附件一并发送给 Fluxgen。

但请先不要删除 core 文件和源代码目录。Fluxgen 可能要向你询问一些额外的问题,到那时你还要 用到它们的。如果 Fluxgen 没有明确地索要,就不要把 core 文件发送给他-- 因为它是你的系统特有的,对他而言,很可能并没有多大用处,况且它体积还不小。