Linux操作系统第6章常用开发工具

合集下载

Linux实验 常用开发工具

Linux实验 常用开发工具

一、实验目的1、掌握Linux 下的C语言编译的基本方法2、理解make工具的功能,学会编制makefile的方法二、实验内容1、利用gcc编译C语言程序,使用不同的选项,观察并分析显示结果2、编写一个由多文件构成的C语言程序,编制makefile,运行make工具进行维护。

三、主要实验步骤1、设计一个程序,打印输出输入数字的正弦值。

要求定义属于自己的头文件,并且放在另外的目录中。

使用下列选项进行编译:-I, -E, -c , –o , -l 。

参考教材的P155-158节的内容。

2、针对下面4个C语言程序,main.c, one.c, two.c, public.h.。

写一个makefile 文件,运行make工具进行维护。

public.h 在另外的目录中。

Main.c:include"public.h"int main(){printf("main ...\n");show1();show2();return 0;}One.c#include"public.h"void show1(){printf("hello, this show1 \n");}Two.c#include"public.h"void show2(){printf("hello, this show2 \n");}public.h#ifndef __MANYCO_MAKEFILE_PUBLIC_1#define __MANYCO_MAKEFILE_PUBLIC_1#include<stdio.h>void show1();void show2();#endif四.实验结果五、心得体会通过对数字的正玄值程序的编写,我们掌握了Linux 下的C语言编译的基本方法,理解了make工具的功能,学会了编制makefile的方法。

嵌入式Linux系统开发与应用考试

嵌入式Linux系统开发与应用考试

嵌入式Linux系统开发与应用考试(答案见尾页)一、选择题1. 嵌入式Linux系统开发环境搭建A. 安装Linux操作系统B. 配置开发环境C. 编写、编译、调试程序D. 连接目标板2. 嵌入式Linux系统编程基础A. C语言基础B. 汇编语言基础C. 嵌入式系统编程规范D. 嵌入式系统函数库3. 嵌入式Linux应用程序开发A. 嵌入式Linux应用程序设计原则B. 嵌入式Linux应用程序开发流程C. 嵌入式Linux应用程序调试技巧D. 嵌入式Linux应用程序性能优化4. 嵌入式Linux系统内核设计与实现A. 内核硬件抽象层(HAL)B. 微内核架构C. 嵌入式系统驱动程序开发D. 嵌入式系统实时性研究5. 嵌入式Linux系统文件系统与存储管理A. 文件系统基本概念B. 嵌入式Linux文件系统实现C. 存储管理技术D. 嵌入式系统数据安全6. 嵌入式Linux网络通信技术A. 网络通信协议分析B. 嵌入式Linux网络驱动程序开发C. 嵌入式Linux套接字编程D. 网络安全研究7. 嵌入式Linux系统跨平台开发技术A. 嵌入式Linux系统与Windows平台的互操作性技术B. 嵌入式Linux系统与macOS平台的互操作性技术C. 嵌入式Linux系统与Linux其他发行版的互操作性技术D. 嵌入式Linux系统全球化与本地化技术8. 嵌入式Linux系统项目实战A. 嵌入式Linux系统产品策划与设计B. 嵌入式Linux系统软件开发与测试C. 嵌入式Linux系统项目实施与运维D. 嵌入式Linux系统项目总结与反思9. 嵌入式Linux系统开发与应用相关技术标准与规范A. 嵌入式Linux系统开发规范B. 嵌入式Linux系统测试标准C. 嵌入式Linux系统文档编写规范D. 嵌入式Linux系统知识产权保护规范10. 嵌入式Linux系统开发环境搭建A. 安装Linux操作系统B. 配置开发环境C. 编写、编译和调试C/C++程序D. 使用集成开发环境(IDE)11. 嵌入式Linux系统编程基础A. 数据类型与运算符B. 控制结构与函数C. 指针与内存管理D. 文件操作与进程管理12. 嵌入式Linux应用程序开发A. 创建和控制线程B. 实现多任务处理C. 数据结构与算法D. 设计用户界面13. 嵌入式Linux系统启动与引导A. 启动过程B. 加载内核与根文件系统C. 系统初始化与配置D. 启动设备驱动程序14. 嵌入式Linux系统调试与诊断A. 使用调试工具B. 分析系统性能C. 调试程序错误D. 系统故障排除15. 嵌入式Linux网络编程A. 网络协议与数据结构B. 建立网络连接C. 数据传输与通信D. 网络安全与防火墙设置16. 嵌入式Linux系统资源管理A. 内存管理B. 文件系统C. 设备分配与管理D. 系统性能监控17. 嵌入式Linux项目实战A. 嵌入式Linux产品设计与实现B. 嵌入式Linux项目开发流程与方法C. 嵌入式Linux项目测试与评估D. 嵌入式Linux项目经验分享与交流18. 嵌入式Linux系统未来发展趋势A. 人工智能与物联网应用B. 5G与低功耗技术发展C. 自动驾驶与智能交通系统D. 绿色环保与可持续发展19. 嵌入式Linux系统开发环境搭建A. 安装Linux操作系统B. 配置开发环境C. 编写、编译、调试程序D. 连接目标板20. 嵌入式Linux系统编程基础A. C语言基础B. 汇编语言基础C. 嵌入式系统编程概念D. 嵌入式系统编程实例21. 嵌入式Linux系统驱动程序开发A. 驱动程序基本概念B. 驱动程序开发流程C. 驱动程序编写实例D. 驱动程序调试与测试22. 嵌入式Linux系统应用程序开发A. 嵌入式Linux应用程序设计原则B. 嵌入式Linux应用程序开发流程C. 嵌入式Linux应用程序实例D. 嵌入式Linux应用程序优化23. 嵌入式Linux系统文件系统与内存管理A. 嵌入式Linux文件系统基本概念B. 嵌入式Linux内存管理机制C. 嵌入式Linux文件系统实现D. 嵌入式Linux内存管理优化24. 嵌入式Linux系统网络编程A. 嵌入式Linux网络编程基础B. 嵌入式Linux套接字编程C. 嵌入式Linux网络应用开发D. 嵌入式Linux网络协议栈实现25. 嵌入式Linux系统设备驱动程序开发A. 设备驱动程序基本概念B. 嵌入式Linux设备驱动程序开发流程C. 嵌入式Linux设备驱动程序编写实例D. 嵌入式Linux设备驱动程序调试与测试26. 嵌入式Linux系统内核裁减与移植A. 嵌入式Linux内核裁减原理B. 嵌入式Linux内核移植方法C. 嵌入式Linux内核配置D. 嵌入式Linux内核集成27. 嵌入式Linux系统项目实战A. 嵌入式Linux系统开发项目需求分析B. 嵌入式Linux系统开发团队组建与分工C. 嵌入式Linux系统开发进度管理与质量控制D. 嵌入式Linux系统开发成果展示与评估28. 嵌入式Linux系统交叉平台开发环境建立A. 搭建交叉开发环境所需硬件设备B. 安装交叉开发工具软件C. 编写交叉平台软件开发框架D. 调试和优化交叉平台程序29. 嵌入式Linux系统应用程序开发技术A. 嵌入式Linux系统编程基础B. 嵌入式Linux系统进程与线程管理C. 嵌入式Linux系统内存管理D. 嵌入式Linux系统文件系统30. 嵌入式Linux系统网络编程A. 嵌入式Linux系统网络通信协议B. 嵌入式Linux系统套接字编程C. 嵌入式Linux系统网络驱动程序开发D. 嵌入式Linux系统网络安全31. 嵌入式Linux系统实时性技术A. 嵌入式Linux系统实时性概念及重要性B. 嵌入式Linux系统实时调度算法C. 嵌入式Linux系统实时任务设计D. 嵌入式Linux系统实时性能优化32. 嵌入式Linux系统低功耗技术A. 嵌入式Linux系统功耗概念及评估方法B. 嵌入式Linux系统低功耗硬件设计C. 嵌入式Linux系统低功耗软件优化D. 嵌入式Linux系统低功耗系统级设计33. 嵌入式Linux系统文件系统优化A. 嵌入式Linux系统文件系统概述B. 嵌入式Linux系统文件系统性能优化C. 嵌入式Linux系统文件系统安全性优化D. 嵌入式Linux系统文件系统可扩展性优化34. 嵌入式Linux系统内核定制与裁减A. 嵌入式Linux系统内核功能分析B. 嵌入式Linux系统内核配置与编译C. 嵌入式Linux系统内核裁减与移植D. 嵌入式Linux系统内核优化与升级35. 嵌入式Linux系统驱动程序开发A. 嵌入式Linux系统驱动程序基本概念B. 嵌入式Linux系统驱动程序开发流程C. 嵌入式Linux系统驱动程序编写规范D. 嵌入式Linux系统驱动程序测试与调试36. 嵌入式Linux系统项目实战案例分析A. 嵌入式Linux系统智能家居项目实战B. 嵌入式Linux系统物联网项目实战C. 嵌入式Linux系统汽车电子项目实战D. 嵌入式Linux系统航空航天项目实战37. 嵌入式Linux系统交叉开发技术A. 嵌入式Java技术B. 嵌入式Python技术C. 嵌入式C/C++技术D. 嵌入式汇编语言技术38. 嵌入式Linux系统驱动程序开发A. 驱动程序基本概念及分类B. 嵌入式Linux系统设备驱动程序开发流程C. 嵌入式Linux系统中断服务程序开发D. 嵌入式Linux系统硬件设备驱动程序调试与测试39. 嵌入式Linux系统文件系统开发A. 文件系统基本概念及分类B. 嵌入式Linux系统常用文件系统解析C. 嵌入式Linux系统文件系统优化与管理D. 嵌入式Linux系统用户认证与权限管理40. 嵌入式Linux系统进程与线程管理A. 进程与线程基本概念及区别B. 嵌入式Linux系统进程调度与进程通信C. 嵌入式Linux系统线程同步与互斥D. 嵌入式Linux系统实时性与并发性处理41. 嵌入式Linux系统网络编程A. 网络编程基础概念及协议分析B. 嵌入式Linux系统套接字编程C. 嵌入式Linux系统TCP/IP协议栈实现D. 嵌入式Linux系统网络设备驱动程序开发42. 嵌入式Linux系统图形用户界面(GUI)开发A. 嵌入式Linux系统GUI组件开发B. 嵌入式Linux系统事件处理与消息循环C. 嵌入式Linux系统多线程与同步D. 嵌入式Linux系统GUI性能优化43. 嵌入式Linux系统安全性设计A. 嵌入式Linux系统安全性概述B. 嵌入式Linux系统权限管理与访问控制C. 嵌入式Linux系统安全审计与监控D. 嵌入式Linux系统加密与解密技术44. 嵌入式Linux系统项目实战A. 嵌入式Linux系统智能家居控制系统设计B. 嵌入式Linux系统车载电子系统设计C. 嵌入式Linux系统工业自动化控制系统设计D. 嵌入式Linux系统医疗设备远程监控系统设计45. 嵌入式Linux系统未来发展趋势与挑战A. 嵌入式Linux系统与云计算、物联网融合B. 嵌入式Linux系统人工智能、机器学习应用C. 嵌入式Linux系统边缘计算技术发展D. 嵌入式Linux系统绿色环保与节能技术二、问答题1. 什么是嵌入式Linux系统?它的主要特点是什么?2. 嵌入式Linux系统开发流程通常包括哪些步骤?3. 嵌入式Linux系统中常用的开发工具有哪些?4. 嵌入式Linux系统中如何进行性能优化?5. 嵌入式Linux系统中如何进行故障排查与调试?6. 嵌入式Linux系统中如何保护知识产权?7. 嵌入式Linux系统中如何进行跨平台开发?8. 嵌入式Linux系统中如何进行可持续性与环保设计?参考答案选择题:1. ABCD2. ABCD3. ABCD4. ABCD5. ABCD6. ABCD7. ABCD8. ABCD9. ABCD10. ABCD11. ABCD 12. ABCD 13. ABCD 14. ABCD 15. ABCD 16. ABCD 17. ABCD 18. ABCD 19. ABCD 20. ABCD21. ABCD 22. ABCD 23. ABCD 24. ABCD 25. ABCD 26. ABCD 27. ABCD 28. ABCD 29. ABCD 30. ABCD31. ABCD 32. ABCD 33. ABCD 34. ABCD 35. ABCD 36. ABCD 37. ABCD 38. ABCD 39. ABCD 40. ABCD41. ABCD 42. ABCD 43. ABCD 44. ABCD 45. ABCD问答题:1. 什么是嵌入式Linux系统?它的主要特点是什么?嵌入式Linux系统是一种特殊的Linux操作系统,主要用于嵌入到各种硬件设备中。

Linux图形化界面开发神器大揭秘必备工具推荐

Linux图形化界面开发神器大揭秘必备工具推荐

Linux图形化界面开发神器大揭秘必备工具推荐Linux操作系统一直以来都以其稳定性和安全性而闻名于世。

然而,对于用户友好的图形化界面却一直不是其强项。

但是,随着技术的不断发展,开发者们已经发掘出了一些Linux图形化界面开发神器,使得Linux开发界也能享受到便捷和高效的开发体验。

在本文中,我们将揭秘一些必备的工具,并向您推荐它们。

1. Qt CreatorQt Creator是一个用于开发C++和QML应用程序的集成开发环境(IDE)。

它为Linux开发者提供了一个直观的界面,可用于设计和创建图形化界面。

Qt Creator支持多种编程语言,并提供了丰富的调试工具和代码编辑功能。

凭借其跨平台性,Qt Creator可以运行于多个操作系统上,并提供对多个编译器的支持。

2. GladeGlade是一个用户界面构建器,可用于创建各种类型的图形化界面。

该工具允许开发者使用拖放方式设计UI布局,并通过连接信号和槽来添加功能。

Glade支持多种编程语言,如C、C++、Python等,并与Gtk、Qt等常用工具库兼容。

它为Linux开发者提供了一种快速构建用户界面的方式,有助于提高开发效率。

3. EclipseEclipse是一个功能强大的开发环境,支持多种编程语言。

尽管它是一个通用的IDE,但Eclipse也提供了对图形化界面开发的良好支持。

通过安装适当的插件,如Eclipse RCP插件,开发者可以创建复杂的图形化应用程序。

Eclipse提供了丰富的工具和特性,如代码自动完成、调试和版本控制等,使得开发过程更加高效。

4. PyGTK作为Python的GTK+绑定,PyGTK是一个用于创建Linux图形化界面的强大工具。

它将GTK+的功能与Python的灵活性相结合,使开发者可以使用Python进行快速的界面设计和开发。

PyGTK提供了一系列的控件和组件,以及用于布局和样式的函数和属性。

通过PyGTK,开发者可以创建出功能丰富、外观精美的Linux应用程序。

Linux图形化界面开发神器大揭秘必备工具推荐

Linux图形化界面开发神器大揭秘必备工具推荐

Linux图形化界面开发神器大揭秘必备工具推荐Linux作为一种强大而稳定的操作系统,广泛应用于各种领域,包括服务器、嵌入式系统和个人计算机等。

而图形化界面开发是Linux应用程序开发的重要一环,为了提高开发效率和用户体验,我们需要一些神器级的工具来辅助开发。

本文将揭秘Linux图形化界面开发的神器,并推荐几款必备工具。

一、Qt CreatorQt Creator是一款跨平台的集成开发环境(IDE),专门用于开发基于Qt框架的应用程序。

Qt是一套跨平台的C++开发框架,可以方便地开发出具备良好用户界面的应用程序。

Qt Creator提供了强大的代码编辑、调试和可视化设计工具,使得开发者可以快速构建出各种复杂的图形化界面。

二、GTKGTK是一套跨平台的图形界面库,被广泛应用于Linux桌面环境中。

GTK提供了丰富的控件库和可视化设计工具,支持用户界面的快速开发和定制。

GTK的特点是简单易用、灵活性强,因此深受开发者的喜爱。

使用GTK可以轻松构建出符合用户期望的界面,并且可以与众多的GTK应用程序进行兼容。

三、ElectronElectron是一款基于Web技术的跨平台应用程序开发工具,它将Web前端技术与桌面应用程序的开发相结合。

使用Electron可以使用HTML、CSS和JavaScript构建图形化界面,并且跨平台运行。

Electron 的灵活性和易用性使得越来越多的开发者选择使用它来开发Linux图形化应用程序。

四、KivyKivy是一款开源的Python框架,用于快速开发跨平台的图形化应用程序。

Kivy使用Python语言,具有简单易懂的语法和丰富的功能库,可以帮助开发者快速构建出优秀的用户界面。

Kivy支持多点触控和手势识别等先进的交互功能,并且可以无缝集成到其他Python库中。

五、GladeGlade是一款可视化界面设计工具,可以帮助开发者快速创建GTK应用程序的用户界面。

Glade提供了直观的拖拽设计界面,开发者只需简单的操作就能完成复杂的界面设计。

《基于ARM9的嵌入式Linux系统开发原理与实践》课件第6章

《基于ARM9的嵌入式Linux系统开发原理与实践》课件第6章
第6章 创建嵌入式Linux交叉开发工具链
6.1 下载源文件 6.2 建立工作目录 6.3 输出环境变量 6.4 建立内核头文件 6.5 建立二进制工具 6.6 建立初始编译器 6.7 建立c库 6.8 建立全套编译器 6.9 完成工具链的设置 6.10 测试和验证交叉编译工具 本章小结
6.1 下 载 源 文 件
转移文件: [root@localhost bin] #mv as ar gcc ld nm ranlib strip $PREFIX/lib/gcc-lib/arm- linux/2.95.3 [root@localhost bin] #for file in as ar gcc ld nm ranlib
图6-1 Linux 2.4.21内核配置界面
6.5 建立二进制工具
binutils是GNU工具之一,它包括连接器、汇编器和其他 用于目标文件和档案的工具,它是二进制代码的处理维护工 具。安装binutils工具包含的程序有addr2line、aபைடு நூலகம்、as、c++filt、 gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、 strings、strip、libiberty、libbfd和libopcodes。
给Linux内核打补丁: [root@localhost linux-2.4.21] #patch -p1 < ../../setup-
dir/patch-2.4.21-rmk1
配置: [root@localhost linux-2.4.21] #make ARCH=arm
CROSS_COMPILE=arm-linux- menuconfig
图6-4 编译初始编译器错误示例

Linux入门学习大全超详细 ppt课件

Linux入门学习大全超详细 ppt课件

Linux操作系统
1994年,Linux的第一个产品版Linux 1.0问世,如 今Linux家族已经有了近140个不同的版本,所有这些 版本都基于最初的免费的源代码。不同的公司可以推 出不同的Linux产品,但是它们都必须承诺对初始源代 码的任何改动皆公布于众。
Linux操作系统
1.1.2 Linux的优点 Linux之所以受到广大计算机爱好者的喜爱,主要原
Linux操作系统
(2) 可以节省大量的资金。Linux是目前惟一可免费 获得的、为PC机平台上的多个用户提供多任务、多进 程功能的操作系统,这是人们喜欢使用它的主要原因。 就PC机平台而言,Linux提供了比其他任何操作系统都 要强大的功能,Linux还可以使用户远离各种商品化软 件提供者促销广告的诱惑,再也不用承受每过一段时 间就花钱去升级之苦,因此可以节省大量用于购买或 升级应用程序的资金。
Linux操作系统
(5) 提供功能强大而稳定的网络服务。Linux最优秀 的功能莫过于其网络功能。首先,它可以支持众多的 网 络 协 议 , 比 如 TCP/IP 协 议 、 SPX/IPX 协 议 、 NETBEUI协议、X.25协议等;其次,Linux可以提供非 常广泛的网络服务,比如WWW、FTP、E-mail、Telnet、 NFS、DHCP、Samba、防火墙以及企业的群组服务等, 这些功能为Linux提供了无与伦比的网络亲和性。
Linux操作系统
4. 实用工具 标准的Linux系统都有一套叫做实用工具的程序,它 们是专门的程序,例如编辑器、执行标准的计算操作 等。另外,用户也可以产生自己的工具。
Linux操作系统
一般来讲,实用工具可分为以下三类。 (1) 编辑器:用于编辑文件。Linux的编辑器主要 有vi、emacs、pico等。 (2) 过滤器:用于接收并过滤数据。Linux的过滤 器(Filter)读取从用户文件或其他地方输入的数据,经 检查和处理后输出结果。从这个意义上说,它们过滤 了经过它们的数据。Linux有不同类型的过滤器,一些 过滤器用行编辑命令输出一个被编辑的文件;另外一 些过滤器是按模式寻找文件并以这种模式输出部分数 据;

Linux下常用的开发工具介绍

Linux下常用的开发工具介绍

Linux下常用的开发工具介绍Linux是一种广泛应用于各种操作系统的开源操作系统内核,具有稳定性高、性能卓越、开放源码等优势。

为了方便开发人员开展工作,Linux提供了众多的开发工具,本文将介绍一些常用的Linux开发工具,包括文本编辑器、编译器、调试器等。

一、文本编辑器文本编辑器是开发人员必备的工具之一,它用于编写代码、修改配置文件等任务。

Linux下有许多优秀的文本编辑器可供选择,以下是其中几种常用的。

1. Vim:Vim是Linux下最受欢迎的文本编辑器之一,它具有强大的编辑功能和丰富的插件支持。

Vim支持多种编程语言的语法高亮以及代码折叠等特性,可以大大提高编码效率。

2. Emacs:Emacs是另一个强大的文本编辑器,它具有高度可定制性和可扩展性。

Emacs支持多种编程语言的语法高亮、智能代码补全等功能,同时还提供了许多其他功能,如邮件客户端、日历、文件管理器等。

3. Sublime Text:Sublime Text是一款流行的跨平台文本编辑器,界面简洁美观,具有丰富的插件和主题支持。

Sublime Text支持多光标编辑、代码片段、自动补全等特性,可以大大提高编码速度。

二、编译器编译器是将源代码转换为可执行文件的工具,Linux提供了多种编译器用于不同的编程语言。

1. GCC:GCC是Linux下最常用的C/C++编译器,它是GNU编译器套装的核心组件。

GCC具有强大的优化能力和丰富的警告机制,能够生成高效的可执行文件。

2. Clang:Clang是一款基于LLVM的C/C++编译器,与GCC相比,Clang具有更快的编译速度和更丰富的错误提示信息。

Clang还支持多种编程语言,如Objective-C、Swift等。

3. Python解释器:Python是一种非常流行的脚本语言,Linux通常会预装Python解释器。

Python解释器允许开发人员直接执行Python脚本,非常方便。

Linux操作系统

Linux操作系统

• 每个版本又分为以下几种:
• Fedora Desktop
• Fedora Workstation Server(WS)
• Fedora Enterprise Server(ES)
• Fedora Advanced Server(AS)
第七页,共317页。
第一章 Linux简介
• Red Hat Fedora
芬兰的大学生Linus Torvalds在Minix基础上 编写了 一个操作系统核心软件,并于1991年10月公布为 Linux 0.0.2版。随后世界上众多的 Unix爱好者和黑 客共同完善了其余部分。
目前有很多商业公司可以免费得到Linux的核心源 代码,并加以包装和改进后形成自己的产品, 即 Linux发行套件(distribution)。
第一章 Linux简介
一、Linux的发展过程
• 在Linux操作系统面世之前,计算机操作系统市场 主要由两大系统占领:Unix系统和Microsoft Windows。
• Unix是大中小型机、工作站和高档微型机的主流操作 系统,拥有众多的企业用户,并已成为事实上的操作 系统标准。
• Windows系统则以易用性占据了微型计算机操作系统 市场的绝大部分份额。
1992年4月
第一个Linux新闻组comp.os.linux诞生,Linux 0.96首次可以运 行X- Window;
1993年1月 第一个商业发行版Slackware Linux诞生;
1994年3月 Linux 1.0推出,Linux转向GPL版权协议;
1995年3月 Linux 1.2推出;
第二章 图形环境
三、GNOME的基本操作
GNOME面板(即windows任务栏)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.优化程序选项 • 优化程序常用的选项及其作用
选项格式
-O -O1 -O2


试图减少代码大小和执行时间,但并不执行需要花费大量 编译时间的任何优化 在-O1级别的优化之上,还进行一些额外调整工作——除不 做循环展开、函数内联和寄存器重新命名外,几乎进行所 有可选优化 除了完成所有-O2级别的优化之外,还进行包括循环展开和 其他一些与处理器特性相关的优化工作
6.2.4 控制程序的执行
• 断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint)
它们统称为停止点
1.设置和显示断点 (1)设置断点:用break命令(其缩写形式为b)设置断点: • break linenum break linenum if condition • break function break file:linenum • break file:function break *address break (2)显示断点 • info breakpoints [num] • info break [num]
一旦启动gdb,就显示gdb提示符: (gdb) 并等待用户输入相应的内部命令
6.2.2 显示源程序和数据
1.显示和搜索源程序
(1)显示源文件
• 利用list命令可以显示源文件中指定的函数或代码行
list
list start , end
list -
list [file:] num
list [file:]function
后显示提示符,其中,××××表示出错原因 • 为了发挥gdb的全部功能,需要在编译源程序时使用-g选项 。如: $ gcc -g prog.c -o prog (针对C语言源程序prog.c) $ gcc -g program.cpp -o program (针对C++源程序program.cpp) • 启动gdb的方法有以下几种: (1)直接使用shell命令gdb (2)以一个可执行程序作为gdb的参数 (3)同时以可执行程序和core文件作为gdb的参数 (4)指定一个进程号PID作为gdb的第二个参数
第6章 常用开发工具
主要内容
• gcc编译系统的概念和使用 • gdb程序调试工具的概念和使用 • 程序维护工具make 的概念和使用
6.1 gcc编译系统
6.1.1 文件名后缀
文件名后缀 .c .i .ii .m 文件类型 C源文件
预处理后的C源文件 预处理后的C++源文件
文件名后缀 .s .S .o
(3)输出格式 • 在print /fmt exp命令中,“/”之后的fmt是表示输出格式的字母,它由
表示格式的字母和表示数据长度的字母组成 。如: • 表示格式 的字母:o x d u t f a i c s
• 表示长度的字母:
b
w
h
g
(4)whatis命令显示出变量的数据类型 (5)x命令可以查看内存地址中数据的值 。其使用格式是: x [/fmt] address (6)display命令可以预先设置一些要显示的表达式。其一般格式是: display [/fmt] exp • 要取消对先前设置的某些表达式的自动显示功能,可以使用以下命令: undisplay [disnum] delete display [disnum]
2.设置和显示观察点
(1)设置观察点
watch expr rwatch expr awatch expr
(2)显示观察点
• info breakpoints info watchpoints 3.设置捕捉点 • 命令catch的格式是: catch event • 另一个命令是tcatch event 4.维护停止点 • delete clear disable 5.运行程序 • run命令的格式: run [args]
-o file
-E
2.编译程序选项 •
选项 格式
-c -S -o file -g -v gcc编译程序常用选项及其作用


只生成目标文件,不进行连接。用于对源文件的分别编译 只进行编译,不做汇编,生成汇编代码文件格式,其名与源 文件相同,但扩展名为.s 将输出放在文件file中。如果未使用该选项,则可执行文件放 在a.out中 指示编译程序在目标代码中加入供调试程序gdb使用的附加 信息 在标准出错输出上显示编译阶段所执行的命令,即编译驱动 程序及预处理程序的版本号
-O3
-O0
-Os
不执行优化
具有-O2级别的优化,同时并不特别增加代码大小
4.连接程序选项

选项格式 连接程序常用的选项及其功能 功 能
object-file- 不以专用后缀结尾的文件名就认为是目标文件名或库名。连接程序可 以根据文件内容来区分目标文件和库 name
-c -S -E 如果使用其中任何一个选项,那么都不运行连接程序,而且目标文件
• 利用print命令可以打印出任何合法表达式的值
• (4)设置断点
另外设置一个断点,i值等于99。
6.3.1 make的工作机制
• GNU的make的工作过程如下:
6.3 程序维护工具make
① 依次读入各makefile文件; ② 初始化文件中的变量; ③ 推导隐式规则,并分析所有规则; ④ 为所有的目标文件创建依赖关系链; ⑤ 根据依赖关系和时间数据,确定哪些目标文件要重新 生成; ⑥ 执行相应的生成命令。
• (7)显示函数调用栈信息

显示函数调用栈信息的命令
格 式 功 能

backtrace [n | -n] bt [n | -n] where [n | -n] frame [n] f [n] up [n] down [n] info frame info f
打印当前的函数调用栈的所有信息。如果有参数n(正整 数),则只打印栈顶上n层帧的信息;如果是- n的形式, 则只打印栈底n层帧的信息 其中,n是栈中帧的编号,从0(表示栈顶)开始递增。如 果不带参数,则显示出当前栈帧的信息;如果给出参数n, 则选定帧号为n的帧作为当前帧 表示向上移动n层栈帧。如果没有参数,则表示向上移动 一层 表示向下移动n层栈帧。如果没有参数,则表示向下移动 一层 显示出当前栈帧的所有信息,如函数地址,调用函数的地 址,被调用函数的地址,目前函数的程序语言、函数参数 地址及值、局部变量的地址等。
6.2.6 应用示例
示例程序源代码
(1)使用带-g选项的gcc命令对该程序进行编译: • $ gcc -g dbme.c -o dbme
• 程序运行时出现错误——段错误
(2)用程序名dbme作为参数启动gdb。
(3)在gdb环境下运行该程序。
• 使用backtrace命令
• 使用list命令显示相关行的内容
1.makefile文件 • make被调用后会依次查找名为GNUmakefile,makefile和 Makefile的描述文件
• 一个示例 :
prog: x.o y.o z.o assmb.o gcc x.o y.o z.o assmb.o -L/home/mqc/lib -lm -o prog x.o:x.c defs.h gcc -c x.c y.o: y.c defs.h gcc -c y.c z.o:z.c gcc -c z.c assmb.o:assmb.s as -o assmb.o assmb.s clean: rm prog *.o
$ gcc f1.c f2.c (针对C语言源程序) 执行完成后,生成默认的可执行文件a.out。
1.预处理选项
C语言预处理程序通常称为cpp,它是宏处理程序,由C编译程序自动 调用,在真正的编译过程之前对程序进行转换。
●几个预处理常用选项:
-C -U name -D name -I dir -D name=definition
3.汇编过程(as) • 汇编过程是汇编程序(Assembler)把汇编语言代码翻译成目标机器
代码的过程
4.连接阶段(ld) • 连接程序(Linker)要解决外部符号访问地址问题 • 连接模式分为静态连接和动态连接
6.1.3 gcc命令行选项
• 在Linux系统中,C/C++程序编译命令是gcc,例如:
6.2.3 改变和显示目录或路径
• (1)directory命令一般格式是:directory [dir]
• • • • •
或者 dir [dir] (2)cd命令使用格式为: cd dir (3)path命令使用格式是: path dirs (4)pwd命令 (5)show directories (6)show paths
文件类型
.F .fpp .FPP FORTRAN源文件 汇编程序文件
必须预处理的汇编程序文件
Objective-C源文件
预处理后的Objective-C源文件
目标文件
.mi
.h .C .cc .cp .cpp .c++ .cxx
.a
.so
静态链接库
动态链接库
头文件 C++源文件
6.1.2 C语言编译过程
1.预处理阶段(cpp )
预处理是常规编译 之前预先进行的工作, 故此得名。它读取C语言 源文件,对其中以“#” 开头的指令(伪指令) 和特殊符号进行处理。 主要包括文件包含、宏 定义和条件编译指令。
2.编译阶段(cc1) • 编译程序(Compiler)对预处理之后的输出文件进行词法分析和语法
分析,试图找出所有不符合语法规则的部分
• Linux下库文件的命名有一个约定,所有的库名都以lib开头。形如:
libx.a 其中,x是指定的库名
相关文档
最新文档