第6章常用开发工具(4学时)详解.ppt

  1. 1、本文档共59页,可阅读全部内容。
  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语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理,如:;将“#include”所指出的文件替代该程序行,有两种格式: #include 文件名 —预处理程序在/usr/include目录下找文件 #include “文件名” —首先在当前工作目录中找,然后到标准目录/usr/include中找; 备注: 使用gcc命令时设置选项,指定查找头文件时要优先有哪些信誉好的足球投注网站的目录。 对C语言源程序中的宏名进行宏替换。 例:#define EOF -1 预处理程序将程序中有EOF的部分以-1取代。;宏定义: 1.可以在C程序中:#define name value: 如: #define stuname “Wang” 2.也可以在gcc命令的选项中设置宏定义; 如:gcc –D name=definition 第二种方式的优先级高于第一种方式,可以覆盖源文件中的定义。;gcc命令的使用;【例】gcc预处理选项;$ gcc –I /temp hello.c ;main() { printf(“display –D variable %s\n”, “test”); printf(“display overwrite var1=%s\n ”, “call for help”); printf(“hello, everyone!\n”); };2.编译阶段 对预处理之后的输出文件进行词法分析、语法分析,试图找出所有不符合语法规则的部分。 并根据问题给出错误消息,终止编译,或给出警告。 当确定程序符合语法规则后,将其“翻译”为功能等价的中间代码,或汇编代码。 3.汇编过程 汇编程序(Assembler)把汇编代码翻译成目标机器代码; 包括代码段和数据段等部分,前者包括程序指令,后者存放各种全局或局部变量。 ;2.gcc的编译程序选项 常用选项及其作用 ; $ cat m1.c #includestdio.h main() { int r; printf(“enter an integer\n”); scanf(“%d”,r); square(r); return 0; };$ gcc –c m1.c $ gcc –c m2.c $ gcc m1.o m2.o –o m12 $ m12 enter an integer 6 square=36 ;4.连接阶段 连接程序(Linker)要解决外部符号访问地址问题,即: 将一个文件中引用的符号(如:变量、函数调用),与该符号??另外一个文件中的定义连接起来,最终成为操作系统可以执行的可执行文件。;6.3 gdb程序调试工具;Linux系统中包含了调试程序gdb, 它是一个用来调试C和 C++ 程序的调试器; gdb可以在程序运行时观察程序的内部结构和内存的使用情况; gdb 所提供的一些功能如下所示: 运行程序,设置程序运行的参数和环境; 控制程序在指定的条件下停止运行; 当程序停止时,可以检查程序的状态; 动态监视程序中变量的值; ;6.3.1 启动gdb和查看内部命令;gdb程序调试的对象是可执行文件,而不是程序的源代码文件; 如果要让产生的可执行文件可以用来调试,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息; (P181,表6.3);并等待用户输入相应的内部命令 ;6.3.2 应用示例;宏定义,变量BIGNUM值为1000;理论分析;ary数组 分配的 内存块;如何通过gdb调试工具验证上述错误?;初始化完成后,回到gdb提示符状态;(3)进入gdb环境后,用run命令运行该程序,系统给出错误提示 ;使用backtrace命令,显示函数调用的时,用户栈的情况。 ;用break命令设置断点,设置当执行到某一行时停止运行; 并且可以结合step命令,一行行跟踪程序执行过程;程序的第19行,且i=100时,程序停止运行;另外设置一个断点,当执行到第19行时,且i值等于99,停止运行;可见,数组的大小与循环体中变量i的变化范围有矛盾!1001000(BIGNUM的值) fary数组的100号元素占用的内存地址, 与ar

文档评论(0)

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

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

1亿VIP精品文档

相关文档