Ubuntu开发应用的技巧集锦.doc

上传人:西安人 文档编号:5015880 上传时间:2020-01-28 格式:DOC 页数:48 大小:1.28MB
返回 下载 相关 举报
Ubuntu开发应用的技巧集锦.doc_第1页
第1页 / 共48页
Ubuntu开发应用的技巧集锦.doc_第2页
第2页 / 共48页
Ubuntu开发应用的技巧集锦.doc_第3页
第3页 / 共48页
Ubuntu开发应用的技巧集锦.doc_第4页
第4页 / 共48页
Ubuntu开发应用的技巧集锦.doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《Ubuntu开发应用的技巧集锦.doc》由会员分享,可在线阅读,更多相关《Ubuntu开发应用的技巧集锦.doc(48页珍藏版)》请在三一文库上搜索。

1、第章Ubuntu开发应用的技巧集锦技巧1 如何搭建Ubuntu Java开发环境Java是SUN公司开发的一门语言。2006年底,SUN Java已经成为彻底的自由软件。所以,Ubuntu爱好者可以轻松体验Java,并在Ubuntu中搭建Java开发环境。下面详细介绍Java 6的安装、编译及运行例子程序helloworld.java。1Java 6的安装在终端下输入以下命令:$sudo apt-get install sun-java6-bin安装Sun Java 6和安装以前版本有所不同,在共安装过程中会弹出图 1所示的阅读和接受许可协议界面。使用“Tab”键选择“是”后,即可顺利完成安装

2、,如图 2所示。图 1 阅读Sun Java6的许可协议成功安装后,选择Ubuntu主菜单“应用程序InternetSun Java 6 Web Start”选项便可查看Java控制面板,如图 3所示。2编译例子程序helloworld.java读者可以从http:/ issue_1/test/helloworld.java获得helloworld.java源代码,并在终端下输入以下命令:$javac helloworld.java图 2 接受Java协议图 3 Java控制面板3运行helloworld在终端下输入以下命令:$java helloworld终端显示“Hello World!”

3、,表示Java环境安装成功。技巧2 使用最地道的Java开发工具NetBeansNetBeans是开发J2EE、JSP的集成开发环境,类似Borland的JBuilder,但功能比JBuilder强大得多。NetBeans是著名的Java集成开发环境,而且是Java的发明者Sun公司主推的一个集成开发工具,并由Java之父James Gosling亲自负责开发、更新及维护。因此,可以说NetBeans是一个地道、开源、敏捷的且功能全面的Java应用开发工具。在终端下输入以下命令即可安装NetBeans:$sudo apt-get install netbeans5.5成功安装后,选择Ubunt

4、u主菜单“应用程序编程NetBeans”选项即可运行之。第一次运行时会弹出接受许可协议对话框,接受后便会出现图 4所示开发界面。图 4 在Ubuntu中运行NetBeans 5.5这样就可以开始使用地道的NetBeans集成开发工具开发自己的Java项目了。技巧3 使用NetBeans快速搭建企业级Java开发环境NetBeans除了是一个地道的Java开发环境之外,更是一个全能的开发环境,较新的NetBeans 6.1已经将主流语言Java(包括J2SE、J2EE)、系统开发语言C/C+、流行的Web开发语言Ruby、PHP全部集成。更为方便的是,在NetBeans安装过程中,可以将Glas

5、sFish及Tomcat等应用环境自动搭建配置好,对于开发者来说十分方便。如何妙用NetBeans为开发者快速定制一个“合身”的开发环境呢?下面介绍实现步骤。1下载“合身”的NetBeans版本使用Firefox访问NetBeans 6.1官方下载地址http:/ netbeans/6.1/final/,会看到图 5所示的NetBeans 6.1下载列表。图 5 选择“合身”的版本打开下载页面后,会看到该下载选择列表中有多种定制好的Netbeans版本。例如专门针对Java开发者的“Web & Java EE”版本,该版本集成了GlassFish和Tomcat开源应用服务器,它们都是优秀的Se

6、rvlet容器。还有供系统开发者使用的C/C+版本,该版本可以用于C/C+系统开发,由于采用定制,所以其体积只有18MB。除了熟悉的Java和C/C+之外,NetBeans还提供了互联网流行的PHP和Ruby支持,定制版本体积同样很小,只有十几兆。当然也可以选择全部支持版本,只不过体积比较大,其大小为219MB。可以根据自己的需要选择适合自己的NetBeans版本,确认将“Language”和“Platform”设置为“简体中文”和“Linux(x86/x64)”选项后,单击“Download”按钮开始下载。2NetBeans的安装下面以“Web & Java EE”版本的NetBeans为例

7、介绍如何搭建一个企业级J2EE开发环境。所下载的“Web & Java EE”版本安装文件为netbeans-6.1-ml-javaee-linux.sh,其大小为139MB,在终端中运行以下命令进行安装:$sudo chmod u+x netbeans-6.1-ml-javaee-linux.sh $sudo ./netbeans-6.1-ml-javaee-linux.sh 稍等片刻,便会出现NetBeans的安装界面,如图 6所示。图 6 开始安装NetBeans从图中可以看到,这里有一个选择安装应用服务器的选项,默认都安装,推荐读者使用GlassFish和NetBeans无缝连接。当然

8、,读者应该根据需要定制应用服务环境,选择完成后,单击“下一步”按钮,弹出接受许可证对话框,如图 7所示。图 7 接受许可协议在接受许可证对话框中,选择“我接受许可证协议中的条款”复选框后单击“下一步”按钮,进入设置安装路径界面,如图 8所示。 图 8 设置安装路径接下来选择NetBeans的安装位置。除非有特别需要,否则使用默认路径即可。单击“下一步”按钮出现如图 9所示界面。图 9 设置应用服务器参数在接下来的安装界面中,可以设置应用服务器的路径、服务端口、管理员名称和密码。为了安全起见,建议修改管理员密码。单击“下一步”按钮后会出现“摘要”对话框。该对话框中列出了安装的详细信息,确认无误后

9、,便可以单击“安装”按钮开始安装,如图 10所示。图 10 开始安装NetBeans安装完成后会提示注册,注册后会得到更多NetBeans官方的技术支持。到此为止,一个企业级Java开发环境已搭建完成,下面通过简单实例展示NetBeans易用、快捷的开发。3使用选择Ubuntu主菜单“应用程序编程Netbeans”选项即可运行之,其主界面如图 11所示。图 11 NetBeans主界面选择NetBeans主界面右侧“欢迎使用NetBeans IDE6.1”窗口中的“Java”选项,弹出图 12所示“新建项目”对话框。图 12 新建项目单击其中“选择项目”列表框下的“样例Java”选项,然后选择

10、其右侧“项目”下的“Anagram Game”(字迷游戏)项目,单击“下一步”按钮开始创建第一个Java项目,如图 13所示。图 13 设置项目名称和位置在随后的新建项目对话框中,可以修改项目名称和保存路径。这里采用默认即可。单击“完成”按钮完成项目的创建。这时NetBeans的主界面中就出现了Anagram Game项目,如图 14所示。图 14 完成第一个Java项目图 15 运行字谜游戏项目单击主界面中的绿色箭头按钮便可以运行该项目,运行效果如图 15所示。至此,简单的几步操作就完成一个完整的Java项目。其实NetBeans只要是用来进行企业级开发,如J2EE开发、JSP Web开发、

11、系统应用开发等,则开发测试环境一应俱全,开发、调试和运行都很方便。技巧4 如何安装Eclipse Java集成开发环境Eclipse是一个可扩展的开放源代码集成开发环境(IDE),它是IBM所支持的开源社区推出的Java集成开发环境。Eclipse允许在同一集成开发环境(IDE)中集成丰富的插件,可以支持诸如C/C+、PHP、Python、Ruby等多种语言,从而实现了不同语言和开发工具之间的互操作性,使开发者可以专注于开发和创新。下面详细介绍Eclipse 3.2的安装和例子工程HelloWorld的创建。1Eclipse 3.2的安装在终端下输入以下命令即可安装Eclipse3.2:sud

12、o apt-get install eclipse2创建例子工程HelloWorld(1)新建一个Java项目,单击主菜单“FileNewProject”选项,弹出“New Project”对话框,如图 16所示。(2)选择下列列表框中的“JavaJava Project”选项,单击“Next”按钮,弹出“New Java Project”对话框,在“Project name”输入框处输入HelloWorld,如图 17所示。(3)在HelloWorld项目上单击右键,选择“New Java Class”选项,在“package”处输入cn.org.lcuc,在“Name”处输入HelloWo

13、rld,勾选“public static void main(String args)”复选框,单击“Finish”按钮,如图 18所示。图 16 新建一个Java项目图 17 为项目命名图 18 新建一个lava类(4)运行例子程序HelloWorld.java,如图 19所示。图 19 运行HelloWorld.java例子程序技巧5 如何为Eclipse安装 PHP插件PHP是互联网上使用最为广泛Web语言,从1994年诞生至今,已被2000多万个网站采用。Ubuntu是最早对LAMP架构提供全面支持的Linux发行版本之一。PHPEclipse项目则创建于2002年9月,作为Eclip

14、se的插件为PHP爱好者提供强大的编辑、开发和调试功能。可以手工下载PHPEclipse插件压缩包,并解压缩到Eclipse的features和plugins目录下。1下载PHPEclipse插件可以通过http:/ phpeclipse_1.1.8.bin.dist.zip下载PHP Eclipse插件。2解压缩在终端下输入以下命令:$unzip ./net.sourceforge.phpeclipse_1.1.8.bin.dist.zip -d ./phpeclipse/(根据当前的下载目录而定)3将features和plugins文件夹复制到eclipse-3.2的目录下在终端输入以下命

15、令:$cp -r features plugins ./eclipse-3.2(Eclipse 3.2的路径根据读者本地解压缩的情形而定)4重新启动Eclipse如果可以新建PHP项目,说明Eclipse PHP插件部署成功,如图 20所示。图 20 创建PHP项目技巧6 如何安装Eclipse Python插件Python是一种面向对象的高级脚本语言。著名的自由软件作者Eric Raymond在文章如何成为一名黑客中将Python列为黑客应当学习的4种编程语言之一,并建议人们从Python开始学习编程。PyDev是一个Eclipse Python插件,可以迅速将Eclpise打造成为Pyth

16、on开发环境,并可以为Python、Jython开发者提供代码补全、语法高亮、语法分析、调试等功能,它是Python和Jython开发者不可或缺的强大工具。下面介绍PyDev插件的下载和设置。(1)通过http:/ feature- 1_3_14.zip 下载Python Eclipse插件PyDev。(2)解压缩org.python.pydev.feature-1_3_14.zip,在终端下输入以下命令:$unzip ./org.python.pydev.feature-1_3_14.zip -d ./pydev/(根据当前的下载目录而定)(3)将features和plugins文件夹复制到

17、eclipse-3.2的目录下,在终端输入以下命令:$cp -r features plugins ./eclipse-3.2(Eclipse 3.2的路径根据读者本地解压缩的情形而定)(4)重新启动Eclipse。(5)设置PyDev参数。单击主菜单“WindowPreferences”选项,如图 21所示。(6)设置开发环境。在“python interpreters(e.g.:python.exe)”列表框处单击“New”按钮,输入Python二进制可执行文件的路径,通常为/usr/bin/python,弹出图 22所示对话框。(7)单击“OK”按钮,弹出如图 23所示对话框。至此,在E

18、clipse中也可以进行Python或Jython的开发了。图 21 设置Python参数图 22 Python库的路径图 23 Python属性技巧7 如何搭建Ruby开发环境Ruby是一种为简单快捷、面向对象设计和编程的脚本语言。简而言之,Ruby是一种完全面向对象、脚本执行、拥有强大文字处理功能的编程语言,十分适合开发Blog等Web 2.0项目。RDT是Ruby开发工具,也是针对Eclipse的Ruby开发者的插件。通过该插件,Eclipse可以支持Ruby这种功能强大的、面向对象的脚本语言。下面介绍自动安装方式(上述技巧介绍的是手工解压缩插件的方法),从而让部属插件更加便利。(1)打

19、开Eclipse,选择“HelpSoftware UpdateFind and Install”选项。(2)选择“Search for new features”,进入“installnext”选项。(3)单击“New Remote Site”按钮,在“Name”字段处输入RDT,在“URL”字段处输入http:/updatesite.rubypeople.org/release,然后单击“OK”按钮。(4)当提示是否同意许可证时,单击“Accept the License Agreement”按钮即可完成安装。技巧8 如何快速安装C/C+ +开发工具链(ToolChain)Ubuntu环境下

20、的GCC(GNU C Compiler)是GNU推出的功能强大、性能卓越的多平台编译器,它是GNU的代表作品之一。GCC编译器可以将C、C+语言源程序、汇程式化序和目标程序编译、连接成可执行文件。GCC/G+、Glibc和GDB是GNU提供的优秀C/C+软件工具链,其性能不逊于任何商业开发工具。下面介绍如何在Ubuntu下安装使用GCC/G+、Glibc和GDB开发工具链。(1)在终端下,输入以下命令:$sudo apt-get install build-essential$sudo apt-get install scons安装成功后,从源代码编译安装软件所需的工具,如gcc、make、g

21、+及其他所需软件,即完成安装。接下来安装的scons是一个用来替代make的、基于Python的构造工具,它比make使用起来更为方便。(2)在终端下输入以下命令:vi helloworld.chelloworld.c源代码如图 24所示。图 24 编辑helloworld.c可以在UbuntuChina的SVN中的http:/ ubuntuchina/trunk/zine/issue_1/test/helloworld.c查看源代码。 在终端下输入:w,按回车键即可保存读者编写的helloworld.c。 在终端下输入以下命令:vi /home/sirtoozee/Projects/ubun

22、tuchina/trunk/zine/issue_1/test/SConstruct创建编译脚本,如图 25所示。图 25 创建SConstruct(3)在终端下输入“scons”命令,终端提示以下内容:scons: Reading SConscript files . scons: done reading SConscript files. scons: Building targets . gcc -o helloworld.o -c helloworld.c gcc -o helloworld helloworld.o scons: done building targets.可以在终

23、端下输入./helloworld查看二进制可执行程序helloworld的输出结果。技巧9 如何使用GDB调试程序即使是优秀的程序员也难以保证自己在编写代码时不会出现任何错误,因此调试是软件开发是过程中一个必不可少的组成部分。当程序完成编译之后,它很可能无法正常运行,或者会彻底崩溃,或者不能实现预期功能。此时如何通过调试找到问题的症结所在,就变成了摆在开发人员面前最严峻的问题。通常来说,软件项目的规模越大,调试起来就会越困难,也就越需要一个强大而高效的调试器作为后盾。对于Linux程序员来说,目前可供使用的调试器非常多,如字符界面的GDB、CGDB和DDD。本技巧着重介绍最为常用的GDB。GD

24、B是自由软件基金会(Free Software Foundation,FSF)的软件工具之一。安装Ubuntu的开发工具链之后即可使用GDB。GDB可以帮助程序员找到代码中的BUG。如果没有GDB的帮助,程序员要想跟踪代码的执行流程,惟一的办法是通过添加大量的语句产生特定的输出。但这一手段本身就可能会引入新的错误,从而也就无法对那些导致程序崩溃的错误代码进行分析。GDB的出现减轻了开发人员的负担,使得他们可以在程序运行时单步跟踪自己的代码,或者通过断点暂时中止程序的执行。此外,GDB的另一大功能是可以随时查看变量和内存的当前状态,并监视关键数据结构是如何影响代码运行的。1运行在使用GDB之前,

25、需要注意的是,如果想要用GDB对程序进行调试,在用GCC编译源代码时必须先加上“-g”选项,以便产生GDB所需要的调试符号信息。例如,从UbuntuChina的SVN中查看源代码http:/ gcc -g hello.e -o helloworld.c需要注意的是,GCC虽然允许同时使用-g(调试)和-O(大写字母,表示优化)选项,但优化会影响最终生成的代码,导致程序源代码和二进制代码之间的关系变得复杂起来。如果不想为调试制造障碍,建议不要将-g和-O选项一起使用,并且只在程序彻底调试完后才开始进行代码优化,这样调试过程将变得相对轻松和愉快。程序编译后可以直接键入以下命令运行GDB:gdb h

26、ello.eGNU gdb 6.6-debianCopyright (C) 2006 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type show copying to see the conditions.There is absolutely no warranty fo

27、r GDB. Type show warranty for details.This GDB was configured as i486-linux-gnu.Using host libthread_db library /lib/tls/i686/cmov/libthread_db.so.1.(gdb) 现在可以启动GDB调试已经生成的可执行程序Hello.e了。在正常情况下,GDB将显示很多版权和声明等信息。如果不想显示这些信息,可以使用“-q”或“-quiet”选项跳过。启动GDB时另外一个有用的命令行选项是“-d dirname”,其中dirname是一个目录名,该目录名告诉GDB应

28、该到哪里去寻找源代码。此外,如果运行GDB时没有加载程序,可以使用“file”命令载入,效果和运行GDB时载入相同。一旦出现GDB的命令提示符(gdb),就表明GDB已经准备好接收来自用户的各种调试命令了。如果想在调试环境下运行这个程序,可以使用GDB提供的“run”命令,而程序在正常运行时所需的各种参数可以作为“run”命令的参数传入,或者使用单独的“set args”命令进行设置。如果在执行“run”命令时没有给出任何参数,GDB将使用上一次“run”或“set args”命令指定的参数。如果想取消上次设置的参数,可以执行不带任何参数的“set args”命令。下面尝试在调试器中运行这个程

29、序:(gdb) run(gdb) runStarting program: /home/user/hello.e Hello worldProgram received signal SIGSEGV, Segmentation fault.0xb7e268dc in strncpy () from /lib/tls/i686/cmov/libc.so.6(gdb) 运行后显示的最后一行表明程序在调用动态链接库/lib/tls/i686/cmov/libc.so.6中的strncpy ()函数时出现了错误,地址是0xb7e268dc。这对调试来说是非常重要的线索。另外还有一种信息对调试也很重要,

30、即错误发生时的函数调用层级关系,可以通过执行“backtrace”命令获得。在使用GDB调试命令时,用户可以不必输入完整的命令名称,使用任何惟一的缩写都可以。例如“backtrace”命令就可以缩写成“back”甚至“bt”。GDB还支持很多常用的Shell命令编辑特征,比如可以像在bash或tcsh中那样按Tab键补齐命令。如果相关命令不惟一的话,则列出所有可能的匹配项。此外键盘上的方向键可用来翻动历史命令。程序调试完成后,使用下面的命令退出GDB:(gdb) quit2GDB使用和技巧(1)查看源码。GDB是一个源代码级的调试器,使用“list”命令可以查看当前调试对象的源代码。该命令的通

31、用格式为“list m,n”,表示显示从m行开始到n行结束的代码段,而不带任何参数的“list”命令将显示最近10行源代码。list命令可以简化为“l”。list命令的使用如以下形式:(gdb)list(gdb)list n /以第n行为中心显示(gdb)list filename:n /指定文件filename的第n行为中心显示 (gdb)list m,n(gdb)list funcname(2)设置断点。在调试有问题的代码时,在某一点暂停运行往往很有用。这样程序运行到此处时会暂时挂起,等待用户的进一步输入。GDB允许在几种不同的代码结构上设置断点,包括行号和函数名等,并且还允许设置条件断点

32、,让程序只有在满足一定的条件时才停止执行。要根据行号设置断点,可以使用“break linenum”命令。要根据函数名设置断点,则应该使用“break funcname”命令。此外,还可以根据内存地址设置断点,格式为“break address”命令。在以上两种情况中,GDB将在执行指定的行号或进入指定的函数之前停止执行程序。此时可以使用“print”显示变量的值,或者使用“list”查看将要执行的代码。对于由多个源文件组成的项目,如果想在执行到非当前源文件的某行或某个函数时停止执行,可以使用以下形式的命令:(gdb)break filename:linenum(gdb)break filen

33、ame:funcname(gdb)break filename:address条件断点允许当一定条件满足时暂时停止程序的执行,对于调试来说非常有用。设置条件断点的正确语法如下:(gdb)break linenum if expr(gdb)break funcname if expr其中expr是一个逻辑表达式。当该表达式的值为真时,程序将在该断点处暂时挂起。例如,下面的命令将在debugme程序的第38行设置一个条件断点。当程序运行到该行时,如果count的值等于3,就将暂时停止执行:(gdb) break 38 if count=3设置断点是调试程序时最常用到的一种手段。它可以中断程序的运行

34、,给程序员一个单步跟踪的机会。使用命令“break main”在main函数上设置断点可以在程序启动时就开始进行跟踪。接下来使用“continue”命令继续执行程序,直到遇到下一个断点。如果在调试时设置了很多断点,可以随时使用“info breakpoints”命令查看设置的断点。此外,开发人员还可以使用“delete”命令删除断点,或者使用“disable”命令使设置的断点暂时无效。被设置为无效的断点在需要时可以用“enable”命令使其重新生效。(3)单步执行和跟踪。单步执行和跟踪是程序调试的重要手段。为了单步跟踪代码,可以使用单步调试命令“next”。命令可简化为“n”,每执行一次“n”

35、命令,程序就会运行一行。单步跟踪命令为“step”,它每次执行源代码中的一行。在GDB中可以使用许多方法简化操作,除了可以将“step”命令简化为“s”之外,还可以直接输入回车键重复执行前面一条命令。“next”命令和“step”命令的功能非常相似,差别在于如果将要被执行的代码行中包含函数调用,使用step命令将跟踪进入函数体内,而使用next命令则不进入函数体内。(4)观察变量。GDB最有用的特性之一是能够显示被调试程序中几乎任何表达式、变量或数组的类型和值,并且能够用编写程序所用的语言打印出任何合法表达式的值。查看数据最简单的办法是使用“print”命令,只需在“print”命令后面加上变

36、量表达式,即可打印出此变量表达式的当前值,示例如下:(gdb) print str$1 = 0x80485bc Hello world从输出信息中可以看出,输入字符串被正确地存储在字符指针str所指向的内存缓冲区中了。除了给出变量表达式的值外,“print”命令的输出信息中还包含变量标号($1)和对应的内存地址(0x80485bc)。变量标号保存被检查数值的历史记录,如果此后还想访问这些值,就可以直接使用别名,而不用重新输入变量表达式。如果想知道变量的类型,可以使用“whatis”命令,示例如下:(gdb) whatis strtype = char *当第一次调试别人的代码或者面对的是一个异

37、常复杂的系统时,“whatis”命令的作用不容忽视。(5)调试其他进程。有时会遇到一些很特殊的调试需求,如对当前正在运行的其他进程进行调试。这种情况有可能发生在那些无法直接在调试器中运行的进程身上,例如有的进程只能在系统启动时运行。另外如果需要对进程产生的子进程进行调试的话,也只能采用这种方式。GDB可以对正在执行的程序进行调度,它允许开发人员中断程序并查看其状态,之后还能让这个程序正常地继续执行。GDB提供了两种调试正在运行的进程的方式。一种是在GDB命令行上指定进程的PID,另一种是在GDB中使用“attach”命令。例如,开发人员可以先启动test程序,让其开始等待用户的输入,示例如下:

38、#./testPlease enter a number:接下来在另一个终端中用下面的命令查看该进程对应的进程号:$ ps aux |grep testuser 5704 0.0 0.1 3196 760 pts/0 R+ 11:38 0:00 grep test得到进程的PID后,就可以使用GDB对其进行调试了:$gdb test 5704运行上述命令后,如果输出信息中包含以Attaching to program开始的行,表明GDB已经成功地附加在PID为555的进程上了。另外一种连接到其他进程的方法是,先用file命令加载调试时所需的符号表,然后再通过“attach”命令进行连接:(gd

39、b) file testReading symbols from /home/user/test.done.(gdb) attach 5704 如果想知道程序现在运行到了哪里,同样可以使用“backtrace”命令。当然也可以使用“step”命令对程序进行单步调试。完成调试之后,不要忘记用“detach”命令断开连接,让被调试的进程可以继续正常运行:(6)分析核心(core)文件。在程序发生崩溃时,有时可能无法直接运行GDB进行调试。比如程序可能是在另外一台计算机机上运行的,或者因为程序对时间比较敏感,所以手动跟踪调试会产生无法接受的延迟等。遇到这些情况,就只能等到程序运行结束后才能判断崩溃的

40、原因了。这时需要用到Linux提供的core dump机制。当程序中出现内存操作错误时,会发生崩溃并产生核心文件。使用GDB可以对产生的核心文件进行分析,找出程序是在什么时候崩溃的以及在崩溃之前程序都做了些什么。当然,如果要用GDB分析核心文件,也必须在编译时加上-g选项以产生调试符号表。在分析核心文件之前,必须确认系统是否允许生成核心文件,因为很多Linux发行版在默认时禁止生成核心文件。为了生成核心文件,首先必须执行下面的命令:$ulimit -c unlimited然后就可以生成核心文件了。这里仍以前面的debugme程序为例,再次执行下面的命令将产生核心文件:$ ./hello.eHe

41、llo world段错误(core dumped)生成的核心文件名根据系统配置的不同会有所差异。要在GDB中分析核心文件,除了要给出核心文件的文件名外,还必须给出生成该核心文件的可执行程序名称,示例如下:#gdb hello.e coreCore was generated by ./hello.e.Program terminated with signal 11, Segmentation fault.#0 0xb7e198dc in strncpy () from /lib/tls/i686/cmov/libc.so.6从GDB的输出信息中可以看出,产生该核心文件的原因是因为程序收到了序

42、号为11的信号。如果想知道程序在崩溃之前运行到了哪里,可以使用“backtrace”或“info stack”命令查看堆栈的历史记录,示例如下:(gdb) info stack#0 0xb7e198dc in strncpy () from /lib/tls/i686/cmov/libc.so.6#1 0x0804847c in seg_fault_show_token (str=0x80485bc Hello world) at hello.c:31#2 0x080484b8 in main () at hello.c:50由上面的调试信息可知,程序崩溃时正处于strncpy ()函数中。但

43、很多时候开发者感兴趣的可能并不是这个,而是seg_fault_show_token()或main()函数,因为它们才可能是问题真正的症结所在。GDB提供的“frame”命令可以用来在不同的调用上下文中切换,例如下面的命令可以查看exit()函数在执行时的状况:(gdb) frame 1#1 0x0804847c in seg_fault_show_token (str=0x80485bc Hello world) at hello.c:3131 strncpy(ret, str, TOKEN_SIZE);此外,还可以用“up”或“down”命令在不同的函数调用上下文中切换。开发者使用这3条简单

44、的命令可以很轻松地实现调用栈的遍历。在分析核心文件时,通过将遍历栈的命令和检查变量值的“print”命令结合起来,就能够复原程序运行时的全部景象。GDB的功能非常丰富,限于篇幅,本技巧只介绍了GDB的一些最常用的方法和技巧。可以使用“man gdb”命令来了解更多关于GDB的信息。至于图形化调试器,则会在后续技巧中介绍。技巧10 如何在Ubuntu中搭建C/C+ 集成开发工具在Ubuntu中,可以使用著名的C/C+集成开发工具Anjuta。Anjuta是一个C/C+图形集成开发环境,其主要特点是灵活,内嵌代码级的调试器(调用GDB)及应用程序向导(Application widzards),通

45、过该向导可以便捷地创建GNOME桌面环境程序。本技巧将详细介绍此C/C+ IDE开发环境的搭建。安装Anjuta的具体方法为:选择Ubuntu主菜单“系统系统管理新利得软件包管理器”选项,然后在该管理器中单击工具栏中的“搜索”按钮,然后搜索关键词“Anjuta”,如图 26所示。图 26 搜索Anjuta双击搜索到的“anjuta”软件包选项,管理器会自动将其依赖的软件包选中,并显示图 27所示提示。图 27 标记附加软件包单击“标记”按钮便可解决麻烦的依赖关系,然后回到新立得软件包管理器,会发现相关软件包已经被选中,如图 28所示。图 28 选中安装的软件包最后单击“应用”按钮便可开始安装,如图 29所示。图 29 安装中Anjuta成功安装后,便可单击Ubuntu主菜单“应用程序编程Anjuta IDE”选项运行Anjuta IDE,其界面如图 30所示。图 30 在Ubuntu中运行Anjuta至此,就可以使用Anjuta了。技巧11 如何在Ubuntu中安装KDevelop集成开发工具Ubuntu下除了可以使用基于GTK的著名C/C+集成开发工具Anjuta之外,还可使用基于Qt库的KDevelop。KDevelop是Li

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1