gcc与gdb使用

合集下载

gcc 调试手段

gcc 调试手段

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的使用

实验二  GCC 及GDB的使用

实验二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。。。

VisualStudioCode配置mingw-w64的GCCc++编译器(g++)和GD。。。

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 代码。

gcc和gdb的使用 linux

gcc和gdb的使用 linux

漳州师范学院
实验报告
班级 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和gdb

gcc和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是一个代表优化级别的整数。

实验3 使用gcc编译器

实验3 使用gcc编译器

实验三使用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的调试界面。

Linux 段错误

Linux 段错误

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、会提哪行有错。

CentOs下安装gccg++gdb的方法

CentOs下安装gccg++gdb的方法
这篇文章给大家介绍如何在centos8linux发行版上安装lemp服务器本文通过实例代码给大家介绍的非常详细对大家的工作或学习具有一定的参考借鉴价值需要的朋友参考下吧
CentOs下安装 gHale Waihona Puke cg++gdb的方法
Centos支持使用yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户,且在联网的状态下。 使用yum安装gcc:yum install gcc 使用:which gcc 查看是否安装成功 使用yum安装g++:yum install gcc-c++ 使用:which g++ 查看是否安装成功 gdb安装 方法一:使用yum安装:yum install gdb 总结 以上所述是小编给大家介绍的CentOs下安装gcc/g++/gdb的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小 编会及时回复大家的。在此也非常感谢大家对网站的支持!

linux系统调试工具GDB 命令详细解释..

linux系统调试工具GDB 命令详细解释..

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的使用方法

交叉编译问题记录-嵌入式环境下GDB的使用方法

交叉编译问题记录-嵌⼊式环境下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]源码经过编译⽣成可执⾏程序。

GDB调试技巧

GDB调试技巧

1、GDB 启动一般来说GDB主要调试的是C/C++的程序。

要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。

使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。

如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hello如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。

启动GDB的方法有以下几种:1、gdb <program>program也就是你的执行文件,一般在当然目录下。

2、gdb <program> core用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb <program> <PID>如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。

gdb会自动attach上去,并调试他。

program应该在PATH环境变量中搜索得到。

GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。

我在下面只例举一些比较常用的参数:-symbols <file>-s <file>从指定文件中读取符号表。

-se file从指定文件中读取符号表信息,并把他用在可执行文件中。

-core <file>-c <file>调试时core dump的core文件。

-directory <directory>-d <directory>加入一个源文件的搜索路径。

默认搜索路径是环境变量中PATH所定义的路径。

2、GDB的命令概貌启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示:/home/hchen> gdbGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-suse-linux".(gdb) helpList of classes of commands:aliases -- Aliases of other commandsbreakpoints -- Making program stop at certain pointsdata -- Examining datafiles -- Specifying and examining filesinternals -- Maintenance commandsobscure -- Obscure featuresrunning -- Running the programstack -- Examining the stackstatus -- Status inquiriessupport -- Support facilitiestracepoints -- Tracing of program execution without stopping the programuser-defined -- User-defined commandsType "help" followed by a class name for a list of commands in that class.Type "help" followed by command name for full documentation.Command name abbreviations are allowed if unambiguous.(gdb)gdb的命令很多,gdb把之分成许多个种类。

如何使用gcc

如何使用gcc

my_app.c #include <stdio.h> #include "greeting.h" #define N 10 int main(void) { char name[N]; printf("Your Name,Please:"); scanf("%s",name); greeting(name); return 0; }
gcc的常用选项
gcc常用选项 选项 -c 含义 仅对源文件进行编译,不链接生成可执行文件。在对 源文件进行查错时,或只需产生目标文件时可以使用 该选项。 在可执行文件中加入调试信息,方便进行程序的调试。 如果使用中括号中的选项,表示加入gdb扩展的调试信 息,方便使用gdb来进行调试 对生成的代码使用优化,中括号中的部分为优化级别, 缺省的情况为2级优化,0为不进行优化。注意,采用 更高级的优化并不一定得到效率更高的代码。
更实用的Makefile
更实用的Makefile文件
调试
静态调试: 在程序编译阶段查错并修正错误; 主要为语法错误: 输入错误; 类型匹配错误; 排错方式: 利用错误、警告信息,并结合源文件环境排错 动态调试: 在程序运行阶段差错并修正错误; 主要错误类型: 算法错误; 输入错误; 排错方式: 利用调试工具定位并修正错误;
第11章 gcc的使用与开发
主要内容
gcc简介 功能 命令 利用gcc编译c程序 利用make工具简化编译过程 make简介 Makefile基本格式 调试 静态调试 动态调试 gdb调试工具的使用
gcc简介
名称: GNU project C and C++ Compiler GNU Compiler Collection 管理与维护 GNU项目 对C/C++编译的控制 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking

g++教程

g++教程

G++教程各位选手大家好,本文档为gcc/g++/gdb使用教程,本教程所提及的基本操作一般不会因为版本特性而出错。

教程将介绍如何在各种g++内核的IDE和文字界面下使用g++编译链接C 语言源程序生成目标代码,创立动态链接库(.so,.dll),使用动态链接库。

建议先阅读Visual Studio教程简介gcc/g++是gnu项目下的C/C++编译器,是所有Linux环境下默认的C程序编译器。

windows 化的g++编译器主要有MinGW、cygwin等等。

以这些编译器为基础开发的IDE(集成开发环境)有Dev C++、CodeLite等等。

g++内核的IDE的使用IDE的操作基本上都大同小异,可以参考Visual Studio教程新建一个工程例如在Dev C++4.9.9.2(内核g++3.4.2好像有点老)中,新建工程时出现选择console application(控制台应用程序)即可建立平时大家用的C程序的工程,典型特征是有个唯一的main函数,生成exe可执行文件。

选择dll即可建立动态链接库工程,运行会生成dll而不是exe。

CodeLite6.1.1(g++4.8.1)中需要先建立wrokspace工作区,再在其中建立project工程,注意选择路径。

建立工程时,会选择工程类型。

选择console下的g++即可建立C++工程,选择gcc即可建立C工程,其他选项也可以自己尝试。

选择library下的Dynamic library即可建立动态链接库工程,工程最终生成dll文件。

Linux环境下的IDE操作方式也差不多,这里以Ubuntu13.10下的Code::Block12.10为例选择Console application即可建立可执行文件工程,选择Shared library即可建立动态链接库工程。

生成你的工程写好你的程序之后,选择编译即可编译你的源代码,选择运行即可生成对应的可执行文件或者动态链接库。

linux开发工具的使用gcc实验总结简短

linux开发工具的使用gcc实验总结简短

linux开发工具的使用gcc实验总结简短在Linux开发中,GCC是一个广泛应用的编译器套件,为程序员提供了丰富的工具和功能,方便进行开发和调试。

本文将为大家总结一下使用GCC进行实验的经验与技巧。

一、安装GCC在开始使用GCC之前,首先需要安装GCC编译器。

在大多数Linux发行版中,GCC已经预安装,可以直接使用。

如果没有安装,可以通过包管理器进行安装,例如在Ubuntu上可以使用以下命令进行安装:```sudo apt-get install gcc```二、编写和编译源代码1. 创建源代码文件使用任意文本编辑器,创建一个以.c为扩展名的源代码文件,例如hello.c。

2. 编写源代码在源代码文件中,可以使用C语言来编写程序。

下面是一个简单的示例代码:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```3. 编译源代码打开终端,进入源代码所在的目录,使用以下命令进行编译:```gcc hello.c -o hello```其中,`hello.c`是源代码文件的名称,`hello`是生成的可执行文件的名称。

通过`-o`选项指定输出文件名。

三、运行和调试程序1. 运行程序编译成功后,可以直接运行生成的可执行文件。

在终端输入以下命令运行程序:```./hello```程序将会输出`Hello, World!`。

2. 调试程序GCC也提供了强大的调试功能,方便程序员进行调试和排错。

可以通过使用`-g`选项来编译生成带有调试信息的可执行文件:```gcc -g hello.c -o hello-debug```然后,可以使用`gdb`命令来启动调试器,并加载可执行文件进行调试:```gdb hello-debug```调试器提供了许多命令和功能,可以帮助你定位和修复代码中的问题。

gdb调试命令

gdb调试命令

gdb调试命令 gdb是⼀个在UNIX环境下的命令⾏调试⼯具。

如果需要使⽤gdb调试程序,请在gcc时加上-g选项。

下⾯的命令部分是简化版,⽐如使⽤l代替list等等。

1.基本命令1)进⼊GDB #gdb test test是要调试的程序,由gcc test.c -g -o test⽣成。

进⼊后提⽰符变为(gdb) 。

2)查看源码 (gdb) l 源码会进⾏⾏号提⽰。

如果需要查看在其他⽂件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。

或者:使⽤断点或单步运⾏,到某个函数处使⽤s进⼊这个函数。

3)设置断点 (gdb) b 6 这样会在运⾏到源码第6⾏时停⽌,可以查看变量的值、堆栈情况等;这个⾏号是gdb的⾏号。

4)查看断点处情况 (gdb) info b 可以键⼊"info b"来查看断点处情况,可以设置多个断点;5)运⾏代码 (gdb) r6)显⽰变量值 (gdb) p n 在程序暂停时,键⼊"p 变量名"(print)即可; GDB在显⽰变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引⽤标记,以后若想再次引⽤此变量,就可以直接写作"$N",⽽⽆需写冗长的变量名;7)观察变量 (gdb) watch n在某⼀循环处,往往希望能够观察⼀个变量的变化情况,这时就可以键⼊命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运⾏ (gdb) n9)程序继续运⾏ (gdb) c 使程序继续往下运⾏,直到再次遇到断点或程序结束;10)退出GDB (gdb) q2.断点调试命令格式 例⼦ 作⽤break + 设置断点的⾏号 break n 在n⾏处设置断点tbreak + ⾏号或函数名 tbreak n/func 设置临时断点,到达后被⾃动删除break + filename + ⾏号 break main.c:10 ⽤于在指定⽂件对应⾏设置断点break + <0x...> break 0x3400a ⽤于在内存某⼀位置处暂停break + ⾏号 + if + 条件 break 10 if i==3 ⽤于设置条件断点,在循环中使⽤⾮常⽅便info breakpoints/watchpoints [n] info break n表⽰断点号,查看断点/观察点的情况clear + 要清除的断点⾏号 clear 10 ⽤于清除对应⾏的断点,要给出断点的⾏号,清除时GDB会给出提⽰delete + 要清除的断点编号 delete 3 ⽤于清除断点和⾃动显⽰的表达式的命令,要给出断点的编号,清除时GDB不会给出任何提⽰disable/enable + 断点编号 disable 3 让所设断点暂时失效/使能,如果要让多个编号处的断点失效/使能,可将编号之间⽤空格隔开awatch/watch + 变量 awatch/watch i 设置⼀个观察点,当变量被读出或写⼊时程序被暂停rwatch + 变量 rwatch i 设置⼀个观察点,当变量被读出时,程序被暂停catch 设置捕捉点来补捉程序运⾏时的⼀些事件。

最新GDB 单步调试

最新GDB 单步调试

G D B单步调试GDB 单步调试1、首先需要用gcc(g++)对源文件进行编译生成可执行文件,并且在编译时加上选项-g,把调试信息加到目标文件中。

2、假设生成的可执行文件为test,那么gdb test可以用gdb打开test 文件,然后通过break linenum设置断点。

可以输入list查看源文件和行号,方便设置断点。

断点设置好后就可以run命令运行到断点处了。

下面是转载一、初始化输入gdb进入gdb调试环境。

或者直接输入gdb+progfile来加载文件。

注意该文件是使用gcc(或g++)编译得到的。

为了使gdb正常工作,必须使你的程序在编译时包含调试信息,编译时必须使用-g参数来。

或者进入gdb环境后,通过命令file+progfile来加载需要调试的可执行文件文件。

查看源代码:list[函数名][行数]设置程序运行参数:set args二、暂停程序gdb可以使用几种方式来暂停程序:断点,观察点,捕捉点,信号,线程停止。

当程序被暂停后,可以使用continue、next、step来继续执行程序。

continue执行到下一暂停点或程序结束。

next执行一行源代码但不进入函数内部。

step执行一行源代码而且进入函数内部。

1、设置断点:a、break+[源代码行号][源代码函数名][内存地址]b、break.if condition.可以是上述任一参数,condition条件。

例如在循环体中可以设置break.if i=100来设置循环次数。

2、设置观察点:a、watch+[变量][表达式]当变量或表达式值改变时即停住程序。

b、rwatch+[变量][表达式]当变量或表达式被读时,停住程序。

c、awatch+[变量][表达式]当变量或表达式被读或被写时,停住程序。

3、设置捕捉点:catch+event当event发生时,停住程序。

event可以是下面的内容:1)、throw一个C++抛出的异常。

GDB用法详解

GDB用法详解

GDB用法详解GDB是一个强大的命令行调试工具。

虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB。

大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。

UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。

于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。

而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。

在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。

1 GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。

(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。

一个调试示例源程序:tst.c代码:1 #include23 int func(int n)4 {5 int sum=0,i;6 for(i=0; i7 {8 sum+=i;9 }10 return sum;11 }121314 main()15 {16 int i;17 long result = 0;18 for(i=1; i<=100; i++)19 {20 result += i;21 }2223 printf("result[1-100] = %d", result );24 printf("result[1-250] = %d", func(250) );25 }编译生成执行文件:(Linux下)root@linux:/home/benben/test# gcc -g tst.c -o tst使用GDB调试:代码:root@linux:/home/benben/test# gdb tst <---------- 启动GDBGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-suse-linux"...(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

GCC使用教程

GCC使用教程

GCC使用教程目录1.gcc1.makefile写法2.gcc_egcs使用3.gdb使用4.gcc常用选项对代码的影响1.一般情况2.-O 编译选项3.-O2 编译选项4.-fomit-frame-pointer 编译选项5.-fomit-frame-pointer && -O26.-fPIC 编译选项7.-static 编译选项5.AT&T的汇编格式6.x86内联汇编1.简述2.内联汇编3.程序模板4.操作数5.修饰寄存器列表6.操作数约束7.示例1.寄存器约束2.匹配约束3.内存操作数约束4.修饰寄存器7.不同的CPU下最佳编译参数8.代码维护1.简单cvs2.automake3.diff4.rcs5.内核重编译常见故障6.cvs7.共享库工具8.代码优化9.GNU 编码标准10.书籍gccmakefile写法蓝森林 2001年3月22日08:44作者:许明彦Abstract:在Unix 上写程式的人大概都碰过Makefile,尤其是用C 来开发程式的人。

用make来开发和编译程式的确很方便,可是要写出一个Makefile就不简单了。

偏偏介绍Makefile 的文件不多,GNU Make 那份印出来要几百页的文件,光看完Overview 就快阵亡了,难怪许多人闻Unix 色变。

本文将介绍如何利用GNU Autoconf 及Automake 这两套软体来协助我们『自动』产生Makefile 档,并且让开发出来的软体可以像Apache, MySQL 和常见的GNU 软体一样,只要会``./configure'', ``make'', ``make install'' 就可以把程式安装到系统中。

如果您有心开发Open Source 的软体,或只是想在Unix 系统下写写程式。

希望这份介绍文件能帮助您轻松地进入Unix Programming 的殿堂。

Linux程序设计基础—C环境(gcc gdb makefile)

Linux程序设计基础—C环境(gcc gdb makefile)
© 2006 博创科技
博创科技 嵌入互动
Linux程序需要首先转化为低级机器语言即所谓的二进制代码 以后,才能被操作系统执行。 例如编程时,先用普通的编程语言生成一系列指令,这些 指令可被翻译为适当的可执行应用程序的二进制代码。这 个翻译过程可由解释器一步步来完成,或者也可以立即由 编译器明确地完成。 shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利 用自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立的 二进制代码文件然后才可以运行。
© 2006 博创科技
博创科技 嵌入互动
GNU风格 (2/2)
当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。 要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义 (typedef)。先定义变量,再使用。 尽量避免在if的条件中进行赋值。 请在名字中使用下划线以分割单词,尽量使用小写;把大写字母留给宏和 枚举常量,以及根据统一惯例使用的前缀。例如,应该使用类似 ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。 用于表明一个命令行选项是否给出的变量应该在选项含义的说明之后,而 不是选项字符之后被命名。
博创科技 嵌入互动
命令模式
4、复制和移动 yy 复制当前行到内存缓冲区 nyy 复制 n 行内容到内存缓冲区 y与光标移动的组合 p 将缓冲区的内容粘贴到光标的后面 P 将缓冲区的内容粘贴到光标的前面 另:在末行模式下实现移动 :n1,n2 m n3 : 把 n1到n2 行内容搬到第 n3 行后
© 2006 博创科技
© 2006 博创科技
博创科技 嵌入互动
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GDB 概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许, 各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如 果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、 BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就 是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以 是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。 从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这 些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可 能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有 着图形化工具所不能完成的功能。
(gdb) disassemble func
查看运行时数据


一、程序变量
在GDB中,你可以随时查看以下三种变量的值: 1、全局变量(所有文件可见的) 2、静态全局变量(当前文件可见的) 3、局部变量(当前Scope可见的) 如果你的局部变量和全局变量发生冲突(也就是重名),一般情况下是局部变量会隐藏全局变量,也就是说,如果一个全局变 量和一个函数中的局部变量同名时,如果当前停止点在函数中,用print显示出的变量的值会是函数中的局部变量的值。如果此 时你想查看全局变量的值时,你可以使用“::”操作符: file::variable function::variable 可以通过这种形式指定你所想查看的变量,是哪个文件中的或是哪个函数中的。例如,查看文件f2.c中的全局变量x的值: gdb) p‘f2.c’::x 当然,“::”操作符会和C++中的发生冲突,GDB能自动识别“::”是否C++的操作符,所以你不必担心在调试C++程序时会出现 异常。
生成静态库和动态库
静态库生成: ar rc libxx.a xxx.o gcc xx.c –static –Lxx –lxx –o xx 动态库生成: gcc hi.c -I./ -fPIC -shared -o libhi.so gcc mian.c -I./ -L./ -lhi -o main
编辑和搜索源代码
Edit Edit number Edit function Edit filename:number Edit filename:function Edit *address
源代码内存
你可以使用info line命令来查看源代码在内存中的地址。info line后面可以跟“行 号”,“函数名”,“文件名:行号”,“文件名:函数名”,这个命令会打印
基本gdb命令
Ctrl+c 发信号量中断当前操作 Info break:显示断点信息 Delete n:去除第几号断点 Disable n:暂停使用某个断点 Enable n:启动某个暂停的断点 Continue:继续运行
启动GDB的几种方法
1、gdb program(示例)
program 也就是你的执行文件,一般在当前目录下。 2、gdb program core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后 core dump后产生的文件。 3、gdb program 1234 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时 的进程ID。gdb会自动attach上去,并调试他。program应该在PATH 环境变量中搜索得到。
设置断点
我们用break命令来设置断点。正面有几点设置断点的方法: break function 在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。 break linenum 在指定行号停住。 break +offset break -offset 在当前行号的前面或后面的offset行停住。offset为自然数。 break filename:linenum 在源文件filename的linenum行处停住。 break filename:function 在源文件filename的function函数的入口处停住。 break *address 在程序运行的内存地址处停住。 break break命令没有参数时,表示在下一条指令处停住。 break … if cond …可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示 当i为100时停住程序。 查看断点时,可使用info命令,如下所示:(注:n表示断点号) info breakpoints [n] info break [n] info watchpoints [n] 。
用gdb调试GCC程序
gdb是一个用来调试C和C++程序的常用调 试工具之一。 gdb所提供的一些功能擦: 监视程序中变量的值。 设置断点以使程序在指定的代码行上停止 执行。 逐行执行代码。 分析崩溃程序的产生的core文件
暂停 / 恢复程序运行
调试程序中,暂停程序运行是必须的,GDB可以方便地暂停 程序的运行。你可以设置程序的在哪行停住,在什么条件 下停住,在收到什么信号时停往等等。以便于你查看运行 时的变量,以及运行时的流程。 当进程被gdb停住时,你可以使用info program 来查看程 序的是否在运行,进程号,被暂停的原因。 在gdb中,我们可以有以下几种暂停方式:断点 (BreakPoint)、观察点(WatchPoint)、捕捉点 (CatchPoint)、信号(Signals)、线程停止(Thread Stops)。如果要恢复程序运行,可以使用c或是continue 命令。

在GDB中运行程序

在gdb中,运行程序使用r或是run命令。程序的运行,你 有可能需要设置下面三方面的事。 运行环境。
set env environmentVarname=value 设置环境变量。如:set env USER=benben show env [varname] 查看环境变量,不带varname,打印出当前所有环境变量。
工作目录。

cd 相当于shell的cd命令。 pwd 显示当前的所在目录
程序的输入输出。

使用重定向控制程序输出。如:run > outfile
调试已运行的程s查看正在运行的程序的PID(进程ID), 然后用gdb PID process-id 格式挂接正在运行的程序。 2、先用gdb 关联上源代码,并进行gdb,在gdb中用 attach process-id 命令来挂接进程的PID。并用detach来 取消挂接的进程。
出所指定的源码在运行时的内存地址,如:

(gdb) info line tst.c:func Line 5 of "tst.c" starts at address 0x8048456 and ends at 0x804845d .
还有一个命令(disassemble)你可以查看源程序的当前执行时的机器码,这个 命令会把目前内存中的指令dump出来。如下面的示例表示查看函数func的汇 编代码。
基本gdb命令
List 显示程序内容,一般10行 List 函数名:显示函数对应内容 List 行号:显示该行周围的源代码 Set listsize 行数:设置显示代码的行数 Show listsize :显示当前listsize的设置 List first,last:显示first和last之间的内容
维护停止点

Delete n:去除第几号断点 Disable n:暂停使用某个断点 Enable n:启动某个暂停的断点 clear 清除所有的已定义的停止点。 clear function 清除所有设置在函数上的停止点。 clear linenum 清除所有设置在指定行上的停止点。


二、数组
有时候,你需要查看一段连续的内存空间的值。比如数组的一段,或是动态分配的数据的大小。你可以使用GDB的“@”操作 符,“@”的左边是第一个内存的地址的值,“@”的右边则你你想查看内存的长度。例如,你的程序中有这样的语句: int *array = (int *) malloc (len * sizeof (int)); 于是,在GDB调试过程中,你可以以如下命令显示出这个动态数组的取值: p *array@len @的左边是数组的首地址的值,也就是变量array所指向的内容,右边则是数据的长度,其保存在变量len中,其输出结果,大 约是下面这个样子的: (gdb) p *array@len $1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40} 如果是静态数组的话,可以直接用print数组名,就可以显示数组中所有数据的内容了。
GDB的命令概貌

在命令行中输入 gdb,然后键入help(示例) root@linux:/home/benben# gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-suse-linux". (gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands obscure -- Obscure features running -- Running the program stack -- Examining the stack status -- Status inquiries support -- Support facilities tracepoints -- Tracing of program execution without stopping the program user-defined -- User-defined commands
相关文档
最新文档