Linux培训-C编程.ppt

上传人:自*** 文档编号:126527355 上传时间:2020-03-25 格式:PPT 页数:33 大小:210KB
返回 下载 相关 举报
Linux培训-C编程.ppt_第1页
第1页 / 共33页
Linux培训-C编程.ppt_第2页
第2页 / 共33页
Linux培训-C编程.ppt_第3页
第3页 / 共33页
Linux培训-C编程.ppt_第4页
第4页 / 共33页
Linux培训-C编程.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《Linux培训-C编程.ppt》由会员分享,可在线阅读,更多相关《Linux培训-C编程.ppt(33页珍藏版)》请在金锄头文库上搜索。

1、Linux培训 Linux下使用C语言 许智君Zhij xu 内容提纲 gccgdbMakeWindows到Linux程序移植 C语言简介 在80年代末期美国国家标准协会 AmericanNationalStandardsInstitute 发布了一个被称为ANSIC的C语言标准 这更加保证了将来在不同平台上的C的一致性 Linux上可用的C编译器是GNUC编译器 它建立在自由软件基金会的编程许可证的基础上 因此可以自由发布 你能在Linux的发行光盘上找到它 GNUC编译器 一 基本用法gcc options filenames 说明 在gcc后面可以有多个编译选项 同时进行多个编译操作 很

2、多的gcc选项包括一个以上的字符 因此你必须为每个选项指定各自的连字符 例如 下面的两个命令是不同的 gcc p gtest1 cgcc pgtest1 c当不用任何选项编译一个程序时 GCC将会建立 假定编译成功 一个名为a out的可执行文件 基本编译选项 o选项你能用 o编译选项来为将产生的可执行文件指定一个文件名来代替a out 例 gcc ocountcount c c选项 告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤 这个选项使用的非常频繁 因为它使得编译多个C程序时速度更快并且更易于管理 缺省时GCC建立的目标代码文件有一个 o的扩展名 例 gcc ctest2 c

3、警告选项 在gcc中用开关 Wall控制警告信息 使用示例命令如下 gcc Wall otest3 1test3 1 c 查找选项 gcc一般使用默认路径查找头文件和库文件 如果文件所用的头文件或库文件不在缺省目录下 则编译时要指定它们的查找路径 I选项 指定头文件的搜索目录例 gcc I export home st otest1test1 c L选项 指定库文件的搜索目录例 gcc L usr X11 R6 lib otest1test1 c 多个源文件生成一个可执行文件 问题 有多个源文件时 如何生成一个可执行文件 方法1 gcc Wall omytesttest1 ctest2 cte

4、st3 c方法2 gcc Wall ctest1 cgcc Wall ctest2 cgcc Wall ctest3 cgcc omytesttest1 otest2 otest3 o 优化选项 优化选项可以使GCC在耗费更多编译时间和牺牲易调试性的基础上产生更小更快的可执行文件 这些选项中最典型的是 O和 O2选项 O选项 告诉GCC对源代码进行基本优化 这些优化在大多数情况下都会使程序执行的更快 O2选项 告诉GCC产生尽可能小和尽可能快的代码 O2选项将使编译的速度比使用 O时慢 但通常产生的代码执行速度会更快 版本选项 v选项用户将会得到自己目前正在使用的gcc的版本及与版本相关的一些

5、信息 gcc v将得到如下结果 Readingspecsfrom usr lib gcc lib i486 box linux 2 7 2 specsgccversion2 7 2 V选项如果安装了多个版本的gcc 并且想强制执行其中的某个版本 可以用命令通知系统用户要使用的版本 gcc V2 6 3 v 调试和剖析选项 使用调试选项后 gcc在进行编译的时候 在目标文件 o 和创建的可执行文件中插入额外信息 这些额外信息使gdb能够判断编译过的代码和源代码之间的关系 g选项 告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序 例 gcc g otest3test3 c pg选项 告

6、诉GCC在你的程序里加入额外的代码 执行时 产生gprof用的剖析信息以显示你的程序的耗时情况 使用gdb调试工具 命令行如下 例 gcc ggdb3 otest3test3 c 用gdb调试GCC程序 gdb是一个用来调试C和C 程序的常用调试工具之一 gdb所提供的一些功能 监视程序中变量的值 设置断点以使程序在指定的代码行上停止执行 逐行执行代码 分析崩溃程序的产生的core文件 gdb基本用法 需要调试的程序 在编译时要使用调试选项 在默认的情况下 调试符号不会编译到程序中 调试之后 不需要重新编译程序 gdb filename 出现 gdb 在这里 可以输入调试命令 基本gdb命令

7、file装入想要调试的可执行文件 kill终止正在调试的程序 list执行一行源代码但不进入函数内部 next执行一行源代码但不进入函数内部 step执行一行源代码而且进入函数内部 run执行当前被调试的程序quit终止gdbwatch能监视一个变量的值而不管它何时被改变 break在代码里设置断点 这将使程序执行到这里时被挂起 make能不退出gdb就可以重新产生可执行文件 shell能不离开gdb就执行UNIXshell命令 GDB的静态调试启动方法 当需要在命令行通过gdb来启动可执行程序的时候 gdb此时gdb会加载可执行程序的符号表和堆栈 并为启动程序作好准备 设置可执行程序的命令行

8、参数 setargs设置断点 b或break通过命令r或run来启动程序 或者通过c或continue命令来继续已经被暂停的程序 当程序core的时候 需要查看core文件的内容 使用以下方式 gdb此时候 gdb会结合可执行程序的符号和堆栈来查看core文件内容 以分析程序在core掉时的内存影象 GDB的动态调试启动方法 动态调试就是在不终止正在运行的进程的情况下来对这个正在运行的进程进行调试gdb直接在gdb中把一个正在运行的进程连接到gdb中 以便于进行动态调试使用attach命令 attachdetach 调试结束之后 可以使用该命令断开进程与gdb的连接使用attach命令的例子

9、gdbfile 指定进程所关联的程序源代码和符号表attach 使用gdb的命令进行调试 detach 调试结束 解除进程与gdb的连接 使进程继续运行 GDB调试过程中使用到的概念和命令 gdb的工作路径 pwd 查看gdb当前的工作路径 cd 改变gdb当前的工作路径 infoterminal 显示gdb当前所使用的终端的类型信息 gdb的环境 showpaths 显示当前路径变量的设置情况 showenvironment env VARNAME 显示程序的环境变量VARNAME的值 setenvironment envVARNAME VALUE 设置程序的某个环境变量VARNAME的值

10、只对所调试的程序有效 对gdb本身不起作用unsetenvironment envVARNAME 删除程序的某个环境变量VARNAME 断点 断点的作用是当程序运行到断点时 无论它在做什么 都会被停止下来 对于每个断点 你还可以设置一些更高级的信息以决定断点在什么时候起作用 设置断点的位置 代码行 函数上 地址上 在那些含有异常处理的语言 如C 中 还可以在异常发生的地方设置断点断点分为普通断点和条件断点 设置普通的断点 使用break b命令来设置普通断点 有很多种方法可以设置断点 A breakFUNCTION在某个函数上设置断点B break OFFSET或break OFFSET程序运

11、行到当前行时的前几行或后几行 OFFSET表示行号 C breakLINENUM在行号为LINENUM的行上设置断点 D breakFILENAME LINENUM在FILENAME文件中的第LINENUM行上设置断点 E breakFILENAME FUNCTION在FILENAME文件中的名为FUNCTION的函数上设置断点F break ADDRESS在地址ADDRESS上设置断点 这个命令允许你在没有调试信息的程序中设置断点 G break不含任何参数的break命令 会在当前执行到的程序运行栈中的下一条指令上设置一个断点 条件断点 条件断点就是设置的断点只在某个条件成立的时候才有效

12、才会使程序在运行到断点之前停止 break ifCONDITION这个命令设置一个条件断点 条件由CONDITION来决定 在gdb每次执行到此时 如果CONDITION条件的值被计算为非0 那么程序就在该断点处停止 tbreakARGS 该命令设置断点为只有效一次 ARGS的使用同 break 中的参数的使用 删除断点 当一个断点使用完之后 需要删除这些断点 clear命令和delete命令可以完成这项任务 A clear 不带任何参数的clear命令会在当前所选择的栈上清除下一个所要执行到的断点 指令级 当你当前的栈帧是栈中最内层的时候 使用这个命令可以很方便地删除刚才程序停止处的断点 B

13、 clearFUNCTION和clearFILENAME FUNCTION删除名为FUNCTION的函数上的断点 C clearLINENUM和clearFILENAME LINENUM删除第LINENUM行上的断点 D delete breakpoints BNUMS 删除参数所指定的断点 如果没有指定参数 则删除程序中所有的断点 命令可以缩写成d 使断点暂时不起作用 使用enable命令来激活断点或观察点使用disable命令来使断点或观察点暂时不起作用使用infobreak或infowatch命令来观察哪些断点是活跃的 设置观察点 可以使用一个观察点来停止一个程序的执行 当某个表达式的值

14、改变时 观察点将会停止程序 而不需要事先在某个地方设置一个断点A watchEXPRwatch命令使用EXPR作为表达式设置一个观察点 gdb将把表达式加入到程序中 并监视程序的运行 当表达式的值被改变的时候 gdb将会停止程序B rwatchEXPR 使用EXPR作为表达式设置一个断点 当EXPR被程序读取时 程序被gdb暂停C awatchEXPR 使用EXPR作为表达式设置一个观察点 当EXPR被读出然后被写入时 gdb会暂停程序 这个命令常和rwatch合用D infowatchpoints 显示所有设置的观察点的列表 它与infobreakpoints命令类似 其它gdb调试命令 c

15、ontinue c 继续运行被中断的程序 backtrace bt 显示当前堆栈的内容 print p 打印表达式或变量的值 frame f 选择一个栈帧 并进入这个栈帧 同时打印被选择的栈帧的内容摘要信息 该命令的参数是一个栈帧的号码或者是一个栈帧地址 infostack frame 显示栈 帧的摘要信息 run r 在gdb中启动并运行程序 helpinfo 显示命令info的用法 help 显示命令Command的详细用法 对多线程程序的调试 threadTHREAD NO 该命令用于在线程之间进行切换 把线程号为THREAD NO gdb设置的线程号 的线程设置为当前线程infothr

16、eads 查询当前进程所拥有的所有线程的状态摘要信息 gdb按照顺序显示 a 线程号 gdb为被调试进程中的线程设置的顺序号 b 目标系统的线程标识 c 此线程的当前栈信息 一些前面带 号的线程 表示该线程是当前线程 threadapply THREAD NO ALL ARGS 该命令用于向线程提供命令 实例 程序test3 1a c 简单程序样例 程序test3 2 ctest3 2a c 程序优化样例 用命令time test3 2查看效果 程序test3 3 c 错误程序的例子 用gdb查错 程序自动维护工具make 问题 当开发的程序非常庞大 且关系复杂 手工编译链接非常困难解决 利用一个自动系统控制和协调整个程序的创建过程 在这个自动系统中 程序员可以定义创建规则并通过这个规则进行项目的开发 makefile就是定义这种规则的文件 GNUmake解释执行Makefile makefile make是一种自动生成和维护目标程序的工具 可以调用编译器 连接器等根据程序各部分的修改情况 重新编译链接目标代码输入make命令后 系统自动检测系统文件和以定义的规则 完成整个创建过程 程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号