gcc与gdb使用
- 格式:ppt
- 大小:1.84 MB
- 文档页数:31
gcc 调试手段
GCC提供了多种调试手段,帮助开发者定位和修复程序中的问题。
以下是一些常用的GCC调试手段:
1. 编译时加入调试信息:在编译源代码时,通过在GCC命令行中添加`-g`选项,可以生成带有调试信息的可执行文件。
这些调试信息包括源代码行号、局部变量和函数等信息,有助于在调试时更好地理解程序的执行状态。
2. 使用gdb进行调试:GCC编译的可执行文件可以使用GNU Debugger(gdb)进行调试。
通过gdb,可以设置断点、单步执行、查看变量值等操作,帮助定位问题。
在命令行中输入`gdb`命令,然后输入`run`命令即可启动程序进行调试。
3. 打印调试信息:在程序中添加打印语句是一种简单直接的调试方法。
通过打印关键变量的值、函数调用的结果等信息,可以帮助理解程序的执行流程和状态。
4. 内存检查工具:对于C/C++程序,可以使用诸如Valgrind这样的内存检查工具来检测内存泄漏、数组越界等问题。
这些工具可以帮助发现潜在的内存问题,提高程序的稳定性。
5. 日志记录:在程序中添加日志记录功能,将关键信息输出到日志文件中。
这种方法适用于跟踪程序的运行状态和异常情况,有助于定位问题。
6. 单元测试和集成测试:编写单元测试和集成测试用例,对程
序的各个模块进行测试。
通过测试用例的执行和结果分析,可以发现潜在的缺陷和问题。
这些是GCC提供的一些常用调试手段,根据具体情况选择适合的方法进行程序调试,有助于提高代码质量和开发效率。
实验二GCC 及GDB的使用一、实验目的和要求a)掌握VI编译环境。
b)掌握GCC编译命令。
c)掌握多个文件共同编译方法。
d)掌握GDB调试命令。
二、实验内容和原理(可参照课件第五章)a)在VI编辑器里编写简单的“hello,world,I am 13050141XX XXX”,利用GCC编译为可执行文件,执行,观察运行结果。
b)在VI编辑器里编写多个文件(至少两个,其中一个为主程序,一个为需要调用的子程序),为其书写头文件,共同编译为可执行文件,执行,观察运行结果。
学习书写MAKEFILE文件,编译,执行,观察结果。
c)编写循环结构的程序,利用GCC 编译(加参数-g)为可执行文件,利用GDB调试,学习GDB调试命令。
三、实验环境a)硬件:PC机b)软件:LINUX操作系统、虚拟机四、实验步骤vi hello.c i:C语言编程Esc :wq gcc hello.c gdb file a.out run a实验三交叉编译环境配置一、实验目的和要求熟悉 Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。
使用Linux 的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。
二、实验内容a)配置网络,包括配置IP 地址、NFS 服务、防火墙。
b)安装交叉编译器c)配置超级终端,下载文件到目标机上。
三、实验设备及工具(包括软件调试工具)硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。
软件:REDHAT LINUX 9.0+超级终端+ARM-LINUX 开发环境四、实验步骤(所有的内容截图)1、虚拟机设置为桥接模式。
2、配置IP地址,设置为192.168.0.xxx参照实验指导书图1.4.1-1.4.3. 自己截图,说明3、关闭防火墙,参照实验指导书图1.4.4自己截图,说明4、打开桌面超级终端(HyperTerminal),配置COM1,115200波特率,8N1,实验箱插上电源线,网线与主机相连,串口线与主机串口1相连,开机,看bootloader程序VIVI是否自动加载,回车后进入命令提示符。
VisualStudioCode配置mingw-w64的GCCc++编译器(g++)和GD。
机器翻译Using GCC with MinGW使⽤ GCC 和 MinGWIn this tutorial, you configure Visual Studio Code to use the GCC C++ compiler (g++) and GDB debugger from to create programs that run on Windows.在本教程中,您将 Visual Studio Code 配置为使⽤来⾃ mingw-w64的 GCC c + + 编译器(g + +)和 GDB 调试器来创建在 Windows 上运⾏的程序。
After configuring VS Code, you will compile and debug a simple Hello World program in VS Code. This tutorial does not teach you about GCC, GDB, Mingw-w64, or the C++ language. For those subjects, there are many good resources available on the Web.在配置了 VS 代码之后,您将⽤ VS 代码编译和调试⼀个简单的 Hello World 程序。
本教程不教授 GCC、 GDB、 mingw-w64或 c + + 语⾔。
对于这些主题,⽹上有许多很好的资源。
If you have any problems, feel free to file an issue for this tutorial in the .如果您有任何问题,请随意将本教程的问题归档到 VS 代码⽂档存储库中。
Prerequisites 先决条件To successfully complete this tutorial, you must do the following steps:要成功完成本教程,您必须执⾏以下步骤:1. Install .安装 Visual Studio 代码。
漳州师范学院
实验报告
班级 11网络2班学号姓名座号 15 同组人
实验日期成绩
课程名称:操作系统
实验题目:gcc和gdb的使用
实验目的与要求1.掌握Linux操作系统下最常用的c语言编译器gcc的使用;2.掌握Linux操作系统下最常用的代码调试器gdb的使用;3.掌握调试代码的基本方法,如观察变量、设置断点等
实
验
环
境
的
配
置
PC 兼容机。
Window xp 以上操作系统
第 1 页
实验内容与具体步骤将下面的程序输入到一个文件名字为test.c的磁盘文件中,利用调试程序找出其中的错误,修改后存盘。
该程序的功能是显示一个简单的问候语,然后用反序方式将它列出。
漳州师院实验报告
实验内容与具体步骤
实验心得实验中存在的问题及解决办法:
1. 在用gdb进行调试的时候,会运用到一些比如以行号设置断点、以函数名设置断点、以条件表达式设置断点、删除断点、查看和设置变量的值、查看当前设置的断点信息等命令,通过老实讲的以及上网查询的方式找到了这些命令的使用方法。
2. 在编译第一个程序的时候,第一次出现了很多语法错误,通过自己改正了之后解决了这些错误。
3.本次实验学习了一下gcc与gdb的具体使用方法。
并亲自用gdb调试了一下程序。
gdb还是用不熟,只能以后慢慢加深体会了。
注:如果填写内容超出表格,自行添加附页。
漳州师院实验报告。
一. gcc编译器1.简介及功能GNU CC(简称为Gcc)是GNU项目中符合ANSIC 标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。
Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3 和Ada 等多种语言,而且Gcc 又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。
2.Gcc 编译流程分为4个步骤:·预处理(Pre-Processing);·编译(Compiling);·汇编(Assembling);·链接(Linking)。
(1)预处理阶段在该阶段,编译器将头文件编译进来,并且用户可以使用Gcc的选项“-E”进行查看,该选项的作用是让Gcc 在预处理结束后停止编译过程。
(2)编译阶段Gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
(3)汇编阶段汇编阶段是把编译阶段生成的“.s”文件转成目标文件,在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。
4)链接阶段在成功编译之后,就进入了链接阶段。
在这里涉及到一个重要的概念:函数库。
函数库一般分为静态库和动态库两种。
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中。
其后缀名一般为“.a” 。
动态库与之相反,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。
动态库一般后缀名为“.so” 库。
Gcc在编译时默认使用动态库。
3格式及选项参数Gcc指令的一般格式为:Gcc [选项] 要编译的文件[选项] [目标文件](1). 总体选项3)优化选项Gcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。
实验三使用gcc编译器一.实验目的1、巩固vi的使用。
2、练习用Linux下gcc编译器运行c或c++程序。
3、练习使用make工具和调试工具gdb。
4、练习编写简单的c或c++程序。
二.实验内容用vi建立C++/C程序后,学习使用gcc编译器编译执行(命令格式详见实验指导书P100),查看结果。
1. helloworld程序。
2. 判断一个年份是平年还是闰年。
3. 打印九九乘法表。
三.实验步骤1、登陆Linux系统,操作方法请参考实验二。
2、使用vi编写helloworld.cpp程序(安装了vim的同学,可以输入vimhelloworld.cpp),保存。
程序代码如下:using namespace std;#include<iostream>int main(){cout<<”hello,world!\n”;return 0;}或编写helloworld.c程序,代码如下:#include<stdio.h>int main(){printf(“hello,world!\n”);return 0;}然后,利用g++ helloworld.cpp或gcc helloworld.c指令编译执行。
(如果没有任何输出提示,恭喜你,编译执行成功。
否则,会提示出错信息,请检查语法并修改。
)最后,在命令行输入 ./a.out 查看结果。
3、make工具在应用程序的开发过程中,若每次修改源文件都需要重新输入编译命令,这种做法很烦琐而且开发效率不高。
为了能快速组织源文件进行编译,linux中提供了make工具。
Make的运行过程前,必须编写Makefile文件。
它描述了软件包中文件之间的关系,提供更新每个文件的命令。
Make实验上是根据Makefile 来进行编译的。
以helloworld.c为例,编写makefile文件:helloworld:helloworld.ogcc –o helloworld helloworld.o(开头使用Tab键空格) helloworld.o:helloworld.cgcc –o helloworld.o –c helloworld.cclean:rm –f *.o hello然后,重新编译helloworld.c,命令:gcc –g helloworld.c –o helloworld 第三步,输入命令:make4、调试工具---gdb运行gdb调试程序通常的命令格式为:gdb 程序的文件名例如: gdb helloworld启动gdb调试工具后,进入gdb的调试界面。
1执行socket文件时,出现段错误(core dumped)产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.解决方法:利用gdb逐步查找段错误:首先我们需要一个带有调试信息的可执行程序,所以我们加上―-g -rdynamic"的参数进行编译,然后用gdb调试运行这个新编译的程序,具体步骤如下:1、gcc -g -rdynamic d.c2、gdb ./a.out3、r这样就找到了出错位臵。
然后在相应位臵修改。
2linux 段错误如何调试linux下的c程序常常会因为内存访问错误等原因造成segment fault(段错误)此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。
这对于我们发现程序bug很有帮助。
使用ulimit -a可以查看系统core文件的大小限制;使用ulimit -c [kbytes]可以设臵系统允许生成的core文件大小。
ulimit -c 0 不产生core文件ulimit -c 100 设臵core文件最大为100kulimit -c unlimited 不限制core文件大小步骤:1、当发生段错误时,我们查看ulimit -a (core file size (blocks, -c) 0)并没有文件,2、设臵:ulimit -c unlimited 不限制core文件大小3.、运行程序,发生段错误时会自动记录在core中4、test]$ ls -al core.* 在那个文件下(-rw------- 1 leconte leconte 139264 01-06 22:3 1 core.2065)5、使用gdb 运行程序和段错误记录的文件。
(est]$ gdb ./test core.2065)6、会提哪行有错。
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。
和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。
调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb 可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list:显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。
list -输出从上次调用list命令开始往前的10行程序代码。
list n输出第n行附近的10行程序代码。
list function输出函数function前后的10行程序代码。
* forward/search:从当前行向后查找匹配某个字符串的程序行。
使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。
* reverse-search:和forward/search相反,向前查找字符串。
使用格式同上。
* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。
使用格式:break 要设置断点的行号* tbreak:设置临时断点,在设置之后只起作用一次。
使用格式:tbreak 要设置临时断点的行号* clear:和break相反,clear用于清除断点。
使用格式:clear 要清除的断点所在的行号* run:启动程序,在run后面带上参数可以传递给正在调试的程序。
交叉编译问题记录-嵌⼊式环境下GDB的使⽤⽅法本⽂为作者原创,转载请注明出处:本⽂以嵌⼊式 Linux 环境下的 gdb 使⽤为例,记录交叉编译过程中⼀个⽐较关键的问题:configure 过程中 --build, --host, --target 参数的区别。
1. 交叉编译交叉编译是指在⼀种平台上编译出运⾏于另⼀种平台的程序。
这⾥的平台,涉及硬件和软件两个部分,硬件平台指 CPU 架构,软件平台指操作系统。
交叉编译主要针对嵌⼊式领域,因为嵌⼊式系统资源受限,没有办法在嵌⼊式平台上运⾏⼀套编译环境,因此需要在其他性能更强劲的平台上借助交叉编译⼯具链来制作可在嵌⼊式平台上运⾏的程序。
交叉编译与普通编译基本步骤⼀样:[1] configure在编译前进⾏配置。
如果 --host 参数与 --build 参数不同,则是交叉编译。
否则就是普通编译。
[2] make编译。
根据上⼀步 configure 配置⽣成的参数,调⽤相应的编译⼯具链编译⽣成⽬标程序。
[3] make install安装。
将 make ⽣成的⽬标程序安装到指定⽬录。
如果不运⾏ make install,⼿动拷贝到指定⽬录也可。
1.1 --build --host --target看⼀下 configure 步骤中 --build、--host 和 --target 三个参数的定义,下⾯在 gdb 源码⽬录运⾏ './configure --help'./configure --helpSystem types:--build=BUILD configure for building on BUILD [guessed]--host=HOST cross-compile to build programs to run on HOST [BUILD]--target=TARGET configure for building compilers for TARGET [HOST]源码经过编译⽣成可执⾏程序。