您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 67第六章 源代码编译和调试
Page1/40第五章内容回顾Samba和NFS的区别Windows与Linux之间的互访第六章源代码编译和调试预习检查什么是Gcc什么是Gdb3Page4/40本章目标能够使用Gcc来编译程序能够使用Gdb调试有问题的程序Page5/40本章结构Gcc源代码编译和调试Gcc编译流程解析Gdb使用流程Gdb基本命令GdbGcc编译选项分析GCC是什么?GCC以前是GNUCCompiler。GCC现在是GNUCompilerCollection.语言:gcc,g++,gcj…工具:cpp,ld,runtimelibrary…平台:X86-linux,sparc-sun-solaris,arm,MinGW,vxwork…谁写的GCCRichardStallman是GCC最初的作者.现在,自由软件基金会(FSF)指定GCCsteeringCommittee为GCC的官方维护者。为什么选择GCCGCC具备可移植性。GCC是免费的。大家都用GCC,易于发现问题.gcc最基本的用法是∶gcc[options][filenames]options:编译器所需要的编译选项filenames:要编译的文件名。6.1.1Gcc基本用法6.1.1Gcc编译流程解析预处理编译汇编链接hello.c--预编译–E--hello.i----编译–Shello.s--汇编–chello.o--链接–ohello预处理过的C程序编译后的汇编代码汇编后的二进制代码链接后的可执行文件演示演示root@localhostGcc]#gcc–Ehello.c–ohello.iroot@localhostGcc]#gcc–Shello.i–ohello.sroot@localhostGcc]#gcc–chello.s–ohello.oroot@localhostGcc]#gcchello.o–ohello6.1.1文件类型Gcc通过后缀来区别输入文件的类别:v.c为后缀的文件:C语言源代码文件v.a为后缀的文件:是由目标文件构成的库文件v.C,.cc或.cxx为后缀的文件:是C++源代码文件v.h为后缀的文件:头文件v.i为后缀的文件:是已经预处理过的C源代码文件v.ii为后缀的文件:是已经预处理过的C++源代码文件v.o为后缀的文件:是编译后的目标文件v.s为后缀的文件:是汇编语言源代码文件v.S为后缀的文件:是经过预编译的汇编语言源代码文件。6.1.1可执行文件格式Linux系统中可执行文件有两种格式。第一种格式是a.out格式,这种格式用于早期的Linux系统以及Unix系统的原始格式。a.out来自于UnixC编译程序默认的可执行文件名。当使用共享库时,a.out格式就会发生问题。把a.out格式调整为共享库是一种非常复杂的操作。因此,一种新的文件格式被引入Unix系统5的第四版本和Solaris系统中。它被称为可执行和连接的格式(ELF)。这种格式很容易实现共享库。ELF格式已经被Linux系统作为标准的格式采用。gcc编译程序产生的所有的二进制文件都是ELF格式的文件(即使可执行文件的默认名仍然是a.out)。较旧的a.out格式的程序仍然可以运行在支持ELF格式的系统上。6.1.2Gcc编译选项分析总体选项告警和出错选项优化选项体系结构相关选项/*hello1.c*/#includemy.hintmain(){printf(Hello!!\n);return0;}/*my.h*/#includestdio.h依赖选项“-Idir”和“-Ldir”root@localhostGcc]#gcchello1.c-I/root/workplace/Gcc/-ohello1在调试的时候最好不使用任何优化选项,只有当程序在最终发行的时候才考虑对其进行优化。O0,O1,O2,O3#includestdio.hvoidmain(){longlongtmp=1printf(Thisisabadcode!\n);return0;}[root@localhostGcc]#gcc-Wallwarning.c-owarning6.2Gdb调试器GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具6.2Gdb的作用GDB主要完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、动态的改变你程序的执行环境。6.2.1Gdb使用流程查看文件l设置断点b查看断点情况infob运行代码r查看变量值pn单步运行ns恢复程序运行c前提:1、Gdb进行调试的是可执行文件,而不是源代码。2、对.c文件进行编译一定要加上选项“-g”,这样编译出的可执行代码才包含调试信息。流程:6.2.2Gdb基本命令1、工作环境相关命令setargsshowargspathdirshowpathssetenVironmentvar[=value]showenVironment[var]cddirpwdshellcommand2、设置断点与恢复命令infobbreaktbreakdeletedisableenableconditionignorestepnextfinishc6.2.2Gdb基本命令3、Gdb中源码查看相关命令listfile载入程序forward-searchreverse-searchdirdirshowdirectoriesinfoline4、Gdb中查看运行数据相关命令printxn/f/uDisplay表达式Gdb中修改运行参数相关命令set6.2.2Gdb基本命令Gdb中修改运行参数相关命令set本章总结本章介绍了Gcc编译器和Gdb调试器的使用选项多,但常用的不多Page21/40实验实验一:Gcc编译器的使用试验二:用Gdb调试有问题的程序
本文标题:67第六章 源代码编译和调试
链接地址:https://www.777doc.com/doc-3642013 .html