赛迪网

新用户注册

赛迪社区

帮助

  资讯中心 | 技术天地 | 软件特供 | IT财经 | 市场专家 | 互动学校 | DIY专区 | 媒体全文 | IT罗盘 | IT人才




高级检索 媒体速查

发表看法

查看讨论

发给朋友

打印


KDE项目开发人员调试问题解答
(文:David Faure 廖铮编译 2001年07月16日 18:20)

Q:我怎么才能避免Dr Konqi?

你必须设置环境变量KDE_DEBUG(设置为1或者你实际喜欢的任何东西)。

Q:什么是核心文件?我怎么才能得到核心文件?

所为核心文件就是应用程序崩溃的时候的内存影像。使用核心文件,你现在就可以知道设置了哪个变量,应用程序是在哪个地方崩溃的。某些发布版程序禁止生成核心文件。为了重新启用这一功能,请使用“ulimit -c unlimited”命令。

只要你在程序崩溃后获得核心文件,你就可以用gdb appname core命令察看核心文件的内容。这样就会对给定应用程序核心文件打开gdb,一旦gdb提示符出现,最有用的命令就是“bt”,该命令产生崩溃信息的记录(backtrace)。

要了解如何使用gdb的更多信息请参看该页
Q:打印stederr上的debug输出有更好的方法吗?

有的,你可以用kdDebug():kdDebug() << "KMyApp just started" <<endl;

该命令语法很像cout,“<<”之间可以使用多种内部类型。这样就会打印出调试信息,这些调试信息在程序发布的时候会自动关闭(通过--disable-debug)。如果你希望程序发布期间还要获得这些消息,那么,因为这些消息都是警告或者错误,你不妨使用kdWarning()或者kdError()达到这一目的。

组件和库最好使用调试区域代码,比如kdDebug(1234)。使用“kdebugdialog”程序(它是kdebase的一部分)可以关闭或者打开该区域号码的调试输出信息,“kdebugdialog --fullmode”还允许控制记录输出的位置。

说白了:不要使用qDebug(),该函数在程序发布的时候不会被禁用。还要避免使用assert()或者kdFatal(),他们会在出现问题的时候导致程序崩溃,对用户没有半点好处。最好在程序中检测错误,如果可能的话,输出kdWarning或者kdError再行恢复。

Q:调试我的应用程序可以使用什么工具?

kdDebug()函数是一种简单、高效的应用程序调试方式。

gdb,GNU调试器是逐步执行和检查变量的最快方法(最好用5.0版本,该版本比4.1.x好多了)。
kdbg是采用KDE GUI的gdb前端。它支持多种Qt类型(包括QString)。

Memory leak tracer :参看kdesdk/kmtrace。README解释得很全。

kdcop和dcop可以让用户浏览dcop接口、方便地执行dcop调用。

请查看该页面和kdesdk,那里有用的脚本很多。
Q:我在gdb下如何打印qstring?

请查看kdesdk,在你的~/.gdbinit中加入以下命令:

source /path/to/kde/sources/kdesdk/scripts/kde-devel-gdb

然后就可以在gdb中打印qstring myqstring察看其内容。

比如,QString myqstring = QString::fromLatin1("contents"); 可以使用以下的命令来检查:

(gdb) printqstring myqstring
$1 = 99 'c'
$2 = 111 'o'
$3 = 110 'n'
$4 = 116 't'
$5 = 101 'e'
$6 = 110 'n'
$7 = 116 't'
$8 = 115 's'

请参看kde-devel-gdb文件了解其它定义宏。

Q:当我调试kpart应用程序的时候我没有符号(symbol),我该怎么办?

你必须在主程序之后停止下来装载共享库的调试符号。之后,你就可以正常调试了。你甚至可以创建gdb宏以便停在被装载的part后面。以kword为例,我编写的代码如下所示:

define startkword
break main
run
break 'KoDocument::KoDocument(int, QWidget *, char const *, QObject *,
char const *, bool)'
cont

Q:我怎么调试ioslave?

请参看kdebase/kioslave/DEBUG.howto。

(责任编辑 吴北 jiaoxq@staff.ccidnet.com

相 关 文 章

KDE项目开发人员技术问题解答 (2001-07-16 18:11)
KDE项目开发人员基本问题解答 (2001-07-16 17:33)
您想成为KDE项目开发员吗? (2001-07-13 12:56)
VC开发应用程序答疑 (2001-01-09 19:16)
VB开发应用程序答疑 (2000-12-20 19:36)