第6篇 常用开发工具 (4学时).ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 常用开发工具 6.1 概述 6.2 gcc编译系统 6.2.1 C语言编译过程 1.预处理阶段 预处理是常规编译之前预先进行的工作,故此得名。 负责读取C语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理,如: 预处理程序对源程序进行“替换”之后,输出的文件就不包含宏定义、文件包含、条件编译等指令,与源文件功能相同,而形式不同。 gcc命令的使用 在Linux系统中,C/C++程序编译命令是gcc,例如: $ gcc [options] [filenames] 其中filenames为所要编译的程序源文件; 执行完成后,生成默认的可执行文件a.out; [options]部分可以有较多取值, 如:预处理选项、编译选项、优化选项、连接选项,使得gcc命令的功能很多。 2.编译阶段 对预处理之后的输出文件进行词法分析、语法分析,试图找出所有不符合语法规则的部分。 并根据问题给出错误消息,终止编译,或给出警告。 当确定程序符合语法规则后,将其“翻译”为功能等价的中间代码,或汇编代码。 3.汇编过程 汇编程序(Assembler)把汇编代码翻译成目标机器代码; 包括代码段和数据段等部分,前者包括程序指令,后者存放各种全局或局部变量。 4.连接阶段 连接程序(Linker)要解决外部符号访问地址问题,即: 将一个文件中引用的符号(如:变量、函数调用),与该符号在另外一个文件中的定义连接起来,最终成为操作系统可以执行的可执行文件。 6.3 gdb程序调试工具 程序中的错误可按性质分为三种: (1)编译错误,即语法错误。在编译阶段出现, 如:括号不对称、缺少分号等; (2)运行错误:运行时才能发现, 如:除数为0,循环终止条件无法达到。 (3)逻辑错误:程序可以正常运行,但结果不对。 查找程序中的错误,诊断其准确位置,并予以改正, 这就是程序调试。 Linux系统中包含了调试程序gdb, 它是一个用来调试C和 C++ 程序的调试器; gdb可以在程序运行时观察程序的内部结构和内存的使用情况; gdb 所提供的一些功能如下所示: 运行程序,设置程序运行的参数和环境; 控制程序在指定的条件下停止运行; 当程序停止时,可以检查程序的状态; 动态监视程序中变量的值; 6.3.1 启动gdb和查看内部命令 6.3.2 应用示例 理论分析 如何通过gdb调试工具验证上述错误? (1)在使用gcc编译的时候,需要保留一些信息 (如:变量的值,数组的内存地址等), 才能进行gdb调试:方法如下: 使用带-g选项的gcc命令对该程序进行编译: $ gcc -g dbme.c -o dbme (2)用可执行程序文件名dbme作为参数,启动gdb。 $ gdb dbme 即可进入gdb环境如下图所示 使用backtrace命令,显示函数调用的时,用户栈的情况。 用break命令设置断点,设置当执行到某一行时停止运行; 并且可以结合step命令,一行行跟踪程序执行过程 可见,数组的大小与循环体中变量i的变化范围有矛盾!1001000(BIGNUM的值) fary数组的100号元素占用的内存地址, 与ary数组0号元素占用的内存地址相同。 gdb调试过程中的常用命令 准备工作: 为了发挥gdb的全部功能,需要在编译源程序时使用-g选项 : $ gcc -g m1.c -o m1 启动gdb的方法有以下几种: (1)直接使用shell命令gdb $ gdb (2)以一个可执行程序作为gdb的参数 $ gdb m1 一、显示源程序和数据 1.显示和搜索源程序 在被调试的源程序中,进行上下文搜索,也可设定搜索路径。 (1)显示源文件 利用list命令可以显示源文件中指定的函数或代码行; P186,表6.6 (2)模式搜索:在源代码中搜索给定模式的命令 表6.7 forward-search regexp search regexp reverse-search regexp 2.查看运行时数据 (1)print命令 一般使用格式是 :print [/fmt] exp 当被调试的程序停止时,可以用print命令,查看当前程序中运行的数据。 如:print i print i*j (2)gdb所支持的运算符 ① { ty

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档