KDevelop使用笔记【中文教程】
*师从官方文档:
https://userbase.kde.org/KDevelop4/Manual/zh-cn
https://docs.kde.org/trunk5/en/extragear-kdevelop/kdevelop/index.html
*写在前面(一定要看!!!):
本文从debug开始有些功能译者未曾使用,但为了文档的完整性,参考了谷歌翻译,有看不懂的地方,各位请移步官方文档详查。
本文持续更新一些使用心得和细节,写的不周到的地方,欢迎各位前辈批评指正。
1、什么是kdevelop?
KDevelop提供主流IDE的所有设施。而且最重要一点就是他能够很好的理解C++
eg1 我们定义了car这个类
class Car { // ... public: std::string get_color () const; };
在后面我们使用car时候
Car my_ride; // ...do something with this variable... std::string color = my_ride.ge
输入到这里的时候,你只要输入按回车就可以自动补全
eg2
double foo () { double var = my_func(); return var * var; } double bar () { double var = my_func(); return var * var * var; }
当你的鼠标放在函数bar的var上时,你可以看到在bar函数内的var全部都高亮,而foo里的不会,因为kdevelop很聪明;
当你的鼠标右键函数bar的var上时,跳出的菜单里允许你重命名var,这个骚操作不会影响foo里的var,因为kdevelop很聪明;
当你的鼠标双击函数bar的var时候,你会看到文件内所有的var都会高亮
2、Session和Project:kdevelop的基础
2.1 术语(Terminology)解释
一个session包含了所有你想工作的project,比如你可以在一个Session里group两个工程:Linux内核和设备驱动,这将有利于看着内核的代码写驱动,不用切换来切换去,是不是很方便呢?
还有一个操作就是:如果您在项目的当前开发版本以及分支上工作:在这种情况下,您不希望KDevelop混淆属于主干线和分支的类,
因此您可以设置两个会话,具有相同的项目集,但是来自不同的目录(对应于不同的开发分支)。
2.2 开始一个会话并导入工程【Fetch】
A点击kdevelop顶端左侧的Session / Start new session 即可新建一个Session
B导入工程:
source 这里有几种选择代码的来源:git subversion github 等等
destination 工程所存目录
URL 源码链接
GET 点击get即可下载
C选择该目录下的一个 KDevelop工程文件,因为我们没有,直接点next
D next
E 选择工程管理者:如果你选择标准的UNIX来make file,选择custom就好
F 到这里,kdevelop就开始管理工程了
2.3 开始一个会话并打开工程【Import】
直接从硬盘打开就行
2.4 在同一个Session下新建另外一个工程
你懂得。。。
2.5 从头新建一个工程
Projects → New from Template
根据需求选择不同的模板
第二步是问你要不要版本控制,如果不需要或者后面手动配置,直接点none后点finish即可
3、撸源代码【划重点】
kdevelop提供多种高产的开发源码的骚操作
3.1 先瞅瞅
是不是帅爆了。。。
Snippets 代码缩略图 Classes所有的类都可以在这里看到 Documents 最近经常访问的一些文件 File system 本地文件系统 Konsole kdevelop里的命令行窗口
所有的工具介绍:http://userbase.kde.org/Special:myLanguage/KDevelop4/Manual/Tool%20list
3.2 探索源码
这个图显示了:cell的类型,所在的函数,在哪里声明和定义
这个图显示了:这个函数所在的文件,甚至可能来自同一个Session的不同project里,点击蓝色的文件即可找到这个函数!
上面探索源码的方式都不长久,如果想要长久的看,就打开左侧的code browser即可
上面的那个是查看一个变量或者函数,这个是查看一段代码
点击class导航窗口的一个类,即可跳转到相关的类
在Documents里可以查看所有源代码文件
另外:kdevelop提供彩虹色来对代码不同属性的内容进行着色,方便coder查看
3.3 源码导航
pageup 和 pagedown 可以翻页 / 在工具栏的右上角有个outline的窗口:你可以从这里找到这个文件下的类和函数【有点和ctrl+F像,但比+F更高级的是会模糊匹配】
快速打开:跳转到其他文件
A 类:Navigate → Quick open class
B 函数:Navigate → Quick open function
C 文件:Navigate → Quick open file
D 普通的打开:Navigate → Quick open
E 跳转到定义
3.4 撸源码
---代码的自动补全:详见前文
---关于类的文件使用:【我们在第四章会集中介绍所有模块的创建】,这里假设我们已经为bus这个类创建好了bus.cpp和bus.h
比如要为bus添加一个函数,则在bus.h里增加即可,但这里不要写这个函数的源代码,而是将这个源代码写在bus.cpp里,
但是如果有人写在了bus.h里,聪明的kdevelop也帮你做好了:锁定你写在bus.h里的代码,然后选择Code → Move to source,就可以移动到bus.cpp里了! 【当然,应该没有人这么淘气】
PS:这个骚操作其实还是没有你聪明,比如你想在头文件里使用内联函数(inline)
其实这里有个kdevelop的bug:你如果使用第一张图的自动补全后,会把inline这个标志擦掉。
bug的地址: https://bugs.kde.org/show_bug.cgi?id=274245
---变量补全【厉害了我的哥】
比如我们在bus.cpp里输入一个未定义的变量,这时候kdevelop会以下划线的形式告诉我们这是错误的,但是你又想使用这个变量,那么就点击或者{右击 Solve: Declare As. }这个变量会跳出一个悬浮框,问你要不要声明这个变量 并且有不同类型的供你选择:1.无符号整型 2.公有无符号 3.私有无符号 等等,点击其中一种,就会自动在类里声明这个变量
---文档声明【没有最骚,只有更骚】
看过源码的人都知道,很多源码文档都有说明,
如果我们要自己写说明的时候怎么办呢?
把光标放在要声明的那一行,然后Code → Document Declaration,如下图所示
----重命名变量 函数 类
比如你想要修改一个变量 函数 或者类的名字,但是他们又分布在文件的各个角落,你该怎么做呢?
选中他的名字,然后Code → Rename declaration
一键操作!
----代码片段复用
小时候,我们为了写一篇好的作文,会把一些好的词语和句子存入我们大脑的知识库,写作文的时候就可以自如的调出来使用了
similarly
kdevelop也支持这种操作:你可以点击工具栏里的Snippets,然后先“Add repository”创建一个小知识库A,然后再新建一个小的代码片段A1,当你在撸代码的时候,直接输入A1他就会自动帮你找到你这个片段,然后点回车就好了
我们这里只用了他的一小部分功能,详情移步:http://userbase.kde.org/Special:myLanguage/KDevelop4/Manual/Tool_list/Snippets
题外话:写到这里,我已经对kdevelop的强大表示折服了。。。
3.5 待定
3.6 快捷键
setting ---- configure shortcuts
自己喜欢什么设置什么
4. 利用模板生产代码
A 类class
File → New from Template...
首先为这个类选择什么语言? 再选择什么形式的框架? 模板:基础版还是私有指针变量版
B 测试类单元
抱歉,没看懂,大意好像是对从模板新建的类进行测试。。。 感觉没啥鸟用(其实是不会)跳过,跳过
【如果有熟悉的麻烦cc一份给我!】
C 测试文件单元
emmm。。。。 同上,跳过跳过
D 管理模板
在新建类的时候,除了IDE基本提供的外,可以点击Get more Templates... 获取更多,如果还没有,可以新建一个自定义的。。。
【感觉我这学渣目前阶段官方提供的还是够用,大神移步:https://docs.kde.org/trunk5/en/extragear-kdevelop/kdevelop/managing-templates.html】
5、使用自定义Makefile来构建(编译)项目
Preface:实际上编写Makefile这部分因为CMake来做后,本弱渣就完全没有接触过,但为了“文档的完备性”还是坚持了下来,如果感觉翻译的不好的地方,请参考原文档
许多项目使用make程序(如GNU make)解释的makefile文件来描述源文件是如何编译的,比如源文件或者头文件更改,哪些文件必须重新被编译等等
对于简单的项目,手动设置这样的文件通常很容易。 对于较大的项目通常用GNU autotools(autoconf,autoheader,automake)来集成Makefile。
在本部分中,我们假设您有一个Makefile作为您的项目,并教您KDevelop如何与它进行交互。
***【Note】******
kdevelop4系列是不知道GNU autotools的,如果你的工程使用了这些,手动运行./configure
如果有人想在kdevelop里使用这些,就在Windows-> ADD tool view里添加Konsole tool,然后手动运行./configure
PS:这些GNU autotools什么如果需要了解的,可以去这里看看 本人几乎没用过....
*******************
首先来看如何告诉kdevelop你makefile文件里的目标,这儿提供两种方法:第一种是选择一份makefile,第二种选择一些你可能经常编译的目标(库/.cpp/ .etc)。
对于这两种方法,通过单击KDevelop主窗口周边的“project”按钮,打开“project”工具。“Project ”工具窗口包含两部分:
上半部分标题为“Project ” - 列出所有项目,让我们展开基础目录树。下半部分标题为“Project Selection” - 列出了如果您选择菜单项目“Project ”→“Build selection”或按F8将要构建的项目子集;
我们将回到下面的这个部分。
5.1 搭建独立的makefile
在项目视图的顶部,展开一个项目的子树,假设你想运行一个特定的Makefile目标。
这将给你(i)这个项目下目录的图标,(ii)这个项目顶层目录中的文件,(iii)Makefile目标KDevelop可以识别。 这些类别如右图所示。
请注意,KDevelop在一定程度上理解Makefile语法,因此可以为您提供在此Makefile中定义的目标(尽管如果目标是组成或隐含的,这种理解有其限制)。
要建立那里列出的任何目标,用鼠标右键单击它,然后选择Build。 例如,用“clean”的目标来做这个事情就简单地执行“make clean”。 您可以在标题为Build的子窗口中看到发生的情况,显示命令和输出。 (该窗口对应于Build工具,因此您可以使用主窗口周边的Build工具按钮关闭并稍后重新打开该窗口,它显示在图片右下角。
5.2 为重复构建选择一个Makefile目标集合
每次你想建立一些东西的时候,右键单击Makefile对象就会很快变老。相反,我们希望为会议中的一个或多个项目设定单独的目标,我们可以在不需要太多老鼠的情况下重复建立这些目标。这就是“构建目标选择”这个概念的地方:它是一个一个接一个地构建的Makefile目标集合,只要点击顶部按钮列表中的Build选择按钮,选择Project→建立选择菜单项,或点击F8功能键。
“项目”工具视图的下半部分显示了所选Makefile目标的列表。
默认情况下,选择包含所有项目,但可以更改。例如,如果您的项目列表包含三个项目(一个基本库L和两个应用程序A和B),但是您目前只在项目A上工作,那么您可能希望从选择中删除项目B,方法是突出显示选择并按下按钮。此外,可能需要确保在项目A之前构建库L,方法是使用列表右侧的按钮上下移动选择项中的项目。您也可以通过右键单击并选择添加到构建集,或者只是突出显示它,然后点击选定目标列表上方的按钮,来获取特定的Makefile目标。
KDevelop允许你配置什么时候建立选择。为此,使用菜单项目→打开配置。在那里,你可以例如选择“make”应该执行的同时工作的数量 - 如果你的计算机有8个处理器核心,那么在这个领域输入8将是一个有用的选择。在这个对话框中,Default make target是用于选择中所有目标的Makefile目标。
5.3 如何处理错误消息
如果编译器遇到错误消息,只需单击带有错误消息的行,编辑器将跳转到报告错误的行(如果可用列)。 根据错误信息,KDevelop也可能为您提供几种可能的操作来修复错误,例如,如果找到未知的符号,则声明一个先前未声明的变量。
6、在KDevelop中运行程序
一旦你建立了一个程序,你会想要运行它。
为此,需要为您的项目进行启动配置。 启动由一个可执行文件的名称,一组命令行参数和一个执行环境(例如“在shell中运行这个程序”,或者“在调试器中运行这个程序”)组成。
6.1 在KDevelop中进行启动配置
单击选项卡run -> Configure launches,然后选择一个你想要运行的工程,然后点Add New... 按钮。
接下来,你就可以运行程序了。
6.2 一些有用的键盘快捷键
F8 编译/Make
Shift+F9运行
F9 在debug中运行
7、在KDevelop中调试程序
7.1 在debugger中运行一个程序
经过第6部分的launch启动配置后,也就可以在debugger中运行程序了:Run->Debug Launch or F9;如果你对gdb很熟悉,其效果和在启动配置文件中指定的可执行文件启动gdb一样,然后执行Run。
这意味着如果程序在某处调用了abort(例如,当您运行到了a failing assertion)或者存在分段错误时,则调试器将停止。另一方面,如果程序运行结束(有或没有做正确的事情),那么在程序结束之前调试器不会自行停止。
在后一种情况下,您将希望在代码库的所有行上设置断点,以便在运行调试启动之前要调试器停止。 你可以通过在这样一行上移动光标并选择菜单项Run→Toggle breakpoint,或者右击一行并从上下文菜单中选择Toggle Breakpoint来实现。
在调试器中运行程序会使KDevelop处于不同的模式:它将把主窗口外围的所有“工具”按钮替换为适合调试的工具按钮,而不是用于编辑。您可以通过查看窗口的右上角来查看您处于哪种模式:有一些名为Review,Debug和Code的选项卡;点击它们可以让你在三种模式之间来回切换;每种模式都有一套自己的工具视图,您可以按照我们在“工具”和“视图”部分配置“编码”工具的相同方式进行配置。
一旦调试器停止(在断点或调用abort()的点),您可以检查有关您的程序的各种信息。例如,在上面的图片中,我们选择了底部的框架堆栈工具(大致相当于gdb的“backtrace”和“info threads”命令),它显示了左边的程序当前正在运行的各种线程总共8)以及如何执行到当前的停止点在右边(这里:main()被称为run();如果我们停在run()本身调用的函数中,那么列表将会更长。在左边,我们可以检查局部变量,包括当前对象(这个变量指向的对象)。
从这里,你可以做的各种可能性:你可以执行当前行(F10,gdb的“下一个”命令),进入函数(F11,gdb的“步骤”命令),或者运行到函数的结尾F12,gdb的“完成”命令)。在每个阶段,KDevelop将左侧显示的变量更新为当前值。您也可以将鼠标悬停在代码中的某个符号上,例如一个变量;然后KDevelop将显示该符号的当前值,并提供在下次该变量值发生变化时停止执行程序。如果你知道gdb,你也可以点击底部的GDB工具按钮,并有可能输入gdb命令,例如为了改变一个变量的值(目前似乎没有另一种方法)。
7.2 将debugger添加到正在运行的程序中
有时候,想要调试已经运行的程序。一种情况是使用MPI调试并行程序,或调试长时间运行的后台进程。为此,进入菜单项Run→Attach to Process,这将打开一个如上所示的窗口。你会想要选择与KDevelop中当前打开的项目相匹配的程序 - 在我的情况下,这将是step-32程序。
这个程序列表可能会令人困惑,因为它通常在这里所示的情况下很长。点击窗口右上角的下拉框可以让你的生活变得更轻松。默认值是用户进程,即当前登录到本机的任何用户运行的所有程序(如果这是你的台式机或笔记本电脑,除root和各种服务帐户之外,你可能是唯一这样的用户)。该列表不包括由root用户运行的进程。您可以通过选择自己的进程来限制列表,删除所有其他用户运行的程序。或者更好的是:只选择程序,这会删除很多以你的名字正式运行的进程,但是你通常不会与之交互,比如窗口管理器,后台任务等等,这些都不太可能用于调试。
一旦你选择了一个进程,附加到它将使你进入KDevelop的调试模式,打开所有常见的调试工具视图,并停止程序在它发生的位置,当你连接到它。然后,您可能需要设置断点,视点或其他任何必需的操作,然后转到菜单项Run→Continue继续执行程序。
7.3 一些有用的键盘快捷键
F10 下一步 (gdb's “next”)
F11 跳入(gdb's “step”)
F12 跳出(gdb's “finish”)
8、使用版本控制系统
如果您正在处理较大的项目,那么源代码可能由版本控制系统(例如subversion或git)管理。 下面的描述是用subversion编写的,但是如果你使用git或任何其他支持的版本控制系统,情况也是一样的。
首先不是如果项目所在的目录是版本控制的,KDevelop会自动注意。 换句话说:您不需要告诉KDevelop在设置项目时自己查看一份副本; 把KDevelop指向你之前从版本库中检出一个副本的目录是可以的。 如果在版本控制下有这样的目录,请打开“项目”工具视图。 那么你可以做很多事情:
如果您的目录已经过时,可以从存储库中更新它:用鼠标右键单击项目名称,进入Subversion菜单并选择更新。 这将使属于该项目的所有文件都相对于版本库保持最新。
如果要将此操作限制为单个子目录或文件,则将该项目的树视图展开到所需的级别,然后右键单击子目录或文件名,然后执行上述操作。
如果您编辑了一个或多个文件,请将该项目的视图展开到这些文件所在的目录,然后右键单击该目录。这给你一个菜单项Subversion,为您提供不同的选择。选择Compare to base来查看您已经编辑的版本与之前检出的版本库(版本“base”)之间的差异。结果视图将显示此目录中所有文件的“差异”。
如果你只编辑一个文件,你也可以通过在项目视图中右键点击相应的文件名来获得这个文件的Subversion菜单。更简单的是,只需右键点击打开此文件的编辑器视图也会给你这个菜单选项。
如果要检入一个或多个已编辑的文件,请右键单击单个文件,子目录或整个项目,然后选择Subversion→Commit。这会让你进入Review模式,除了Code和Debug之外的第三种模式,你可以在KDevelop主窗口的右上角看到。右边的图片显示了这个外观。在审查模式下,顶部显示的是针对整个子目录/项目以及突出显示更改的每个单独更改的文件(请参阅该部分窗口中的各个选项卡)。默认情况下,所有已更改的文件都位于要提交的变更集中,但如果其修改与您要提交的内容无关,则可以取消选择某些文件。例如,在右边的示例中,我已经取消选择了step-32.cc和step-32.prm,因为这些文件中的更改与我对此项目所做的其他更改无关,而且我还不想检查他们(我可能以后想在一个单独的提交中这样做)。查看更改后,您可以在文本框中输入提交消息,然后点击右侧的提交以发送消息。
正如看到的差异,如果你想检查一个单一的文件,你也可以右键单击编辑器窗口获取Subversion→Commit菜单项。
9、自定义KDevelop
有时你想改变KDevelop的默认外观或行为,例如,因为你习惯了不同的键盘快捷键,或者因为你的项目需要不同的缩进样式来源代码。 在下面的章节中,我们将简要讨论如何针对这些需求定制KDevelop。
9.1 自定义KDevelop
在KDevelop的内置编辑器中和周围可以配置许多有用的东西。 更通用的用法是使用菜单条目编辑器→查看→显示行号来切换行编号,从而更容易将编译器错误消息或调试消息与代码中的位置相匹配。 在同一个子菜单中,您可能还想要打开图标边框 - 代码左侧的一列,KDevelop将显示图标,例如当前行是否存在断点。
9.2 自定义编辑器自定义代码缩进
我们中的许多人喜欢以特定的方式格式化代码。 许多项目也执行一个特定的缩进样式。 两者都不符合KDevelop的默认缩进风格。 但是,可以自定义:进入设置→自定义KDevelop菜单项,然后点击左侧的Source Formatter。 您可以选择广泛使用的预定义缩进样式之一,也可以通过添加新样式然后进行编辑来定义自己的缩进样式。 可能没有办法准确地重新创建项目源过去缩进的样式,但是您可以使用新样式的设置来关闭项目; 下面的两张图中显示了一个例子。
9.3 自定义键盘快捷键
KDevelop有一个几乎无限的键盘快捷键列表(其中一些在本手册几章中的“有用的键盘快捷键部分”中列出),通过菜单Settings→Configure Shortcuts可以改变你的口味。 在对话框的顶部你可以输入一个搜索词,它只显示那些匹配的命令; 您可以编辑绑定到此命令的组合键。
两个被发现是非常有用的改变是设置对齐Tab键(许多人通常不手动输入标签,而宁愿如果编辑器选择代码的布局;与改变的快捷方式,按Tab键 KDevelop缩进/ outdent /对齐代码)。 第二个是把切换断点在Ctrl + B,因为这是一个相当频繁的操作。
9.4 自定义代码自动补全
代码补全在本手册的编写源代码的章节中讨论。 在KDevelop中,它来自两个来源:编辑器和解析引擎。 编辑器(Kate)是更大的KDE环境的一个组件,并且基于在同一文档的其他部分已经看到的单词提供了自动完成。 这样的自动完成可以在工具提示中通过之前的图标来标识:
编辑器的代码完成可以通过设置→配置编辑器→编辑→自动完成来定制。 特别是,您可以选择自动完成之前需要输入多少个字符。
另一方面,Kdevelop自己的自动完成功能更强大,因为它考虑了有关上下文的语义信息。 例如,它知道当你输入对象时,提供哪些成员函数,如下所示:
此上下文信息来自各种语言支持插件,可以在给定文件保存后使用(因此可以检查文件类型并使用正确的语言支持)。
KDevelop的完成被设置为在你输入的时候,几乎在任何地方都可以完成。这可以在设置→配置KDevelop→语言支持中进行配置。如果它尚未设置(因为它应该,默认情况下),确保启用自动调用已设置。
KDevelop有两种显示完成的方法:最小自动完成只显示完成工具提示(即名称空间,类,函数或变量名称)的基本信息。这将看起来类似于凯特完成(除了图标)。
另一方面,全面完成将另外显示每个条目的类型,在功能的情况下,也是他们所采取的论据。另外,如果你正在填写一个函数的参数,完整的完成将在光标上方有一个额外的信息框,它会显示你正在工作的当前参数。
Kdevelop的代码完成也应该带来绿色的任何完成项目,以满足当前期望的类型在最小和完成完成,被称为“最佳匹配”。
配置对话框中完成级别的三种可能选择是:
始终最小化补全:从不显示“完全补全”
最小自动补全:只有手动触发自动完成时才显示“完全补全”(即,无论何时按Ctrl +空格键)
始终完全补全:始终显示“补全”
10.从源头上构建KDevelop
https://docs.kde.org/trunk5/en/extragear-kdevelop/kdevelop/building-kdevelop-from-sources.html
如果你想拥有最新的功能和错误修正,你可以从源代码自己构建KDevelop。【对于我们大多数人来说,显然没必要...】
这里有一个更详细的文章。
请注意,您可以构建一个不稳定的版本。 为了帮助开发人员修复bug,请保留RelWithDebInfo并将错误报告给http://bugs.kde.org,无论是单手还是使用Konqi博士。
10.1 要求
-
kdelibs-devel >= 4.3 - http://www.kde.org
-
qt-devel >= 4.5.2 - http://qt-project.org/
-
boost-devel >= 1.35 - http://www.boost.org
-
g++ >= 4.0 - http://gcc.gnu.org
-
CMake >= 2.6.2 - http://www.cmake.org
-
qjson-devel
10.2 为所有用户安装
mkdir kdevgit cd kdevgit git clone git://anongit.kde.org/kdevplatform git clone git://anongit.kde.org/kdevelop cd kdevplatform mkdir build cd build cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. make && sudo make install kbuildsycoca4 cd ../.. cd kdevelop mkdir build cd build cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. make && sudo make install kbuildsycoca4
10.3 为本地用户安装
mkdir kdevgit cd kdevgit git clone git://anongit.kde.org/kdevplatform git clone git://anongit.kde.org/kdevelop cd kdevplatform mkdir build cd build cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$HOME/kdevelop4 .. make && make install
需要以下行,以便kbuildsycoca4找到所有的.desktop文件
export KDEDIRS=$HOME/kdevelop4:/usr kbuildsycoca4 cd ../.. cd kdevelop mkdir build cd build cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$HOME/kdevelop4 .. make && make install kbuildsycoca4
请注意:无论您何时执行一些调用kbuildsycoca4的包或发行版更新,都需要在更新之后执行以下几行:
export KDEDIRS=$HOME/kdevelop4:/usr
kbuildsycoca4
11.信用和许可证
文档版权参见UserBase KDevelop4/Manual page history
本文档是根据GNU Free Documentation License.