gcc与gdb使用
gcc使用大全
1、用于linux系统下编程的编译器概述GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU 开发的编程语言编译器。
它是一套GNU编译器套装以GPL 及LGPL 许可证所发行的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器。
GCC 原名为GNU C 语言编译器,因为它原本只能处理C语言。
GCC 很快地扩展,变得可处理C++。
之后也变得可处理Fortran、Pascal、Objective-C、Jav a, 以及Ada与其他语言。
历史GCC是由理查德·马修·斯托曼在1985年开始的。
他首先扩增一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。
Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。
为了让自由软件有一个编译器,后来此编译器由斯托曼和Len Tower在1987年以C语言重写并成为GNU 专案的编译器。
GCC的建立者由自由软件基金会直接管理。
在1997年,一群不满GCC缓慢且封闭的创作环境者,组织了一个名为EGCS 〈Experimental/Enhanced GNU Compiler System〉的专案,此专案汇整了数项实验性的分支进入某个GCC专案的分支中。
EGCS比起GCC的建构环境更有活力,且EGCS最终也在1999年四月成为GCC的官方版本。
GCC目前由世界各地不同的数个程序设计师小组维护。
它是移植到中央处理器架构以及操作系统最多的编译器。
由于GCC已成为GNU系统的官方编译器(包括GNU/Linux家族),它也成为编译与建立其他操作系统的主要编译器,包括BSD家族、Mac OS X、NeXTSTEP 与BeOS。
GCC通常是跨平台软件的编译器首选。
有别于一般局限于特定系统与执行环境的编译器,GCC在所有平台上都使用同一个前端处理程序,产生一样的中介码,因此此中介码在各个其他平台上使用GCC编译,有很大的机会可得到正确无误的输出程序。
Linu 系统编程实验gccgdb的使用以及Makefile文件的编写
实验二:gcc、gdb、Makefile的使用●实验目的:(一)学会使用gcc编译器(二)学会gdb调试器的使用(三)学会编写Makefile●实验要求:(一)编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-O2等选项(二)编写一应用程序,使用gdb调试,调试中使用到该小节所介绍的所有命令(三)实现一应用程序,该程序有两个c文件构成,使用makefile来完成对该程序的编译●实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台●实验步骤:(一)gcc编译器1、先用vi编辑hello.c文件,内容如下:2、gcc指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件]例:使用gcc编译命令,编译hello.c生成可执行文件hello,并运行hello上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍四个流程分别做了什么工作3、-E选项的作用:只进行预处理,不做其他处理。
例:只对hello.c文件进行预处理,生成文件hello.i,并查看通过查看可以看到头文件包含部分代码#include <stdio.h>经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。
4、-S选项的使用-S选项的作用:只是编译不汇编,生成汇编代码例:将hello.i文件只进行编译而不进行汇编,生成汇编代码hello.s5、-c选项的使用-c选项的作用:只是编译不连接,生成目标文件.o例:将汇编代码hello.s只编译不链接成hello.o文件6、将编译好的hello.o链接库,生成可执行文件hello7、-static选项的使用-static选项的作用:链接静态库例:比较hello.c连接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大的多,他们的执行效果是一样的8、-g选项的使用-g选项的作用:在可执行程序中包含标准调试信息例:将hello.c编译成包含标准调试信息的可执行文件hello2带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误9、-O2选项的使用-O2选项的作用:完成程序的优化工作例:将hello.c用O2优化选项编译成可执行文件hello3,和正常编译产生的可执行文件hello进行比较(二)gdb调试器1、先用vi编辑文件test.c用于gdb调试器调试,内容如下#include <stdio.h>int main(void){int sum(int sum);int i,result=0;sum(100);for(i=1;i<=100;i++){result+=i;}printf("The sum in main function is %d\n",result);return 0;}int sum(int num){int i,n=0;for(i=0;i<=num;i++){n+=i;}printf("The sum in sum function is %d\n",n);}2、将test.c文件编译成包含标准调试信息的文件test3、启动gdb进行调试可以看到gdb启动界面中显示了gdb的版本、自由软件等信息,然后进入了有”gdb”开头的命令行界面4、l(list)命令l命令用于查看文件可以看到每行代码面前都有对应的行号,这样方便我们设置断点。
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的使用一、实验目的和要求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是否自动加载,回车后进入命令提示符。
gcc 用法
gcc 用法GCC (GNU Compiler Collection) 是一套自由软件编译器,可以用于编译多种编程语言的源代码,包括 C、C++、Objective-C、Fortran、Ada 和其他一些语言。
GCC 是GNU计划的一部分,由自由软件基金会维护和发展。
本文将详细介绍 GCC 的使用方法。
一、环境准备在使用GCC之前,需要先安装好GCC。
GCC是开源软件,常见的Linux发行版都默认安装GCC,Windows下可以通过安装Cygwin或MinGW等方式安装GCC。
安装完成后,在命令行中输入gcc --version查看gcc的版本号确认是否安装成功。
除了GCC之外,还需要一个文本编辑器来编写源代码。
Windows下常用的文本编辑器有Notepad++,Linux下则使用vim或emacs等编辑器。
还需要了解一些基本的编程知识和语法。
二、GCC 编译 C 语言程序以下是一个简单的 C 语言程序,可以输出 "Hello, world!":```c#include <stdio.h>printf("Hello, world!\n");return 0;}```将上述代码保存为 helloworld.c 文件,然后在命令行中进入文件所在目录,输入以下命令编译该程序:```gcc helloworld.c -o helloworld```gcc是编译器的命令,helloworld.c是待编译的源代码文件名,-o helloworld是生成的可执行文件名。
执行上述命令后,GCC 会把源代码编译成可执行文件 helloworld。
运行该可执行文件,可以得到以下输出:```Hello, world!```三、GCC 编译 C++ 程序GCC 也可以编译 C++ 程序,以下是一个简单的 C++ 程序,可以输出 "Hello,world!":```c++#include <iostream>std::cout << "Hello, world!" << std::endl;return 0;}```将上述代码保存为 helloworld.cpp 文件,然后在命令行中进入文件所在目录,输入以下命令编译该程序:```g++ helloworld.cpp -o helloworld```g++是编译器的命令,helloworld.cpp是待编译的源代码文件名,-o helloworld是生成的可执行文件名。
Linux_3_编译工具链
编译工具链前面我们写程序的时候用的都是集成开发环境(IDE: Integrated Development Environment),集成开发环境可以极大地方便我们程序员编写程序,但是配置起来也相对麻烦。
在 Linux 环境下,我们用的是编译工具链,又叫软件开发工具包(SDK: Software Development Kit)。
Linux 环境下常见的编译工具链有:GCC 和 Clang,我们使用的是 GCC。
1编译gcc、g++分别是 gnu 下的 c 和 c++编译器。
$ sudo a pt inst a ll g cc gd b# 安装g cc和gd b$ g cc-v# 查看g cc的版本在讲如何编译之前,有必要给大家回顾一下生成可执行程序的整个过程:对应的 gcc 命令如下:g cc-E hello.c-o hello.i# -E激活预处理,生成预处理后的文件g cc-S hello.i-o hello.s# —S激活预处理和编译,生成汇编代码g cc-c hello.s-o hello.o# -c激活预处理、编译和汇编,生成目标文件g cc hello.o-o hello# 执行所有阶段,生成可执行程序其实没必要指定每一个步骤,我们常常会这样用:g cc-c hello.c# 生成目标文件,g cc会根据文件名hello.c生成hello.og cc hello.o-o hello# 生成可执行程序hello,这里我们需要指定可执行程序的名称,否则会默认生成a.out甚至有时候,我们会一步到位:g cc hello.c-o hello# 编译链接,生成可执行程序hello1.1G C C其它选项选项含义-Wall生成所有警告信息-O0,-O1,-O2,-O3编译器的4个优化级别,-O0表示不优化,-O1为缺省值,-O3的优化级别最高-g指示编译器在编译的时候产生调试相关的信息。
(调试程序必须加上这个选项)-Dmacro相当于在文件的开头加了#define macro-Dmacro=value相当于在文件的开头加了#define macro value-Idir对于#include "file",gcc/g++会先在当前目录查找你所指定的头文件,如果没有找到,他会到系统的 include 目录找.如果使用-I 指定了目录,他会先在你所指定的目录查找,然后再按常规的顺序去找。
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
漳州师范学院
实验报告
班级 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还是用不熟,只能以后慢慢加深体会了。
注:如果填写内容超出表格,自行添加附页。
漳州师院实验报告。
嵌入式系统实验步骤
实验一Ubuntu系统的安装主要内容:1.1vmware的安装1.2建立vmware虚拟机1.3使用vmware安装ubuntu1.4Linux命令练习1.1 vmware的安装本文档介绍在 Windows xp/Win7 系统上使用 VMWare 虚拟机进行开发,如果你直接使用的是 Linux 系统,请忽略此章。
本开发是在ubuntu 11.04下进行的,用户也可以在 Fedora 9下进行开发,用法与ubuntu11.04类似,网上资料比较多,在此不再赘述。
1) 安装光盘目录下的虚拟机VMware-7.1 的目录下的 VMware-7.1.exe文件如图:双击安装:初始化完成后会出现:2)点击 Next:3)选择 Typical,然后点击Next:4)点击 Next:5)点击 Continue:7) 稍等几分钟完成安装:8)为了保证能正常运行可以点击Restart Now ,然后运行 VMware,如下图所示:点击 Help 下面的“Enter License Key”:点击Enter License Key:这时打开光盘目录下的虚拟机下 VMware-7.1 注册机下的 VM7.1KeyGen.exe 如图:首先点击 Generate 然后点击 Copy 最后点击Exit,复制到上面我们打开的License Key中:点击 OK,再点击 Close 即可完成安装。
1.2 建立vmware虚拟机1)打开VMWare:用户安装镜像选择光盘目录下的ubuntu-iso下面的ubuntu-11.04-desktop-i386.iso文件。
2)填写用户信息:3)选择安装目录:4)设置虚拟硬盘大小:5)完成设置:1.3 使用vmware安装ubuntu点击Finish后系统会自动重新启动, 如果系统直接开始就进入了安装界面如图:这时点击界面左上角的红色正文形图案,然后点击power off:此时回到开始界面:双击 CD/DVD 2(IDE)将其改成 autoinst.iso,将 CD/DVD(IDE)里面的路径设置成 ubuntu ,镜像文件路径如图:如果 CD/DVD 2(IDE)的 Browse 中没有 autoinst.iso 选项,可以直接将 autoinst.iso 复制到里面去,如图:点击 OK,重新启动:如果此时还是无法进入,重新启动虚拟机请注意会出现这样一个界面:按F2进入SETUP:按键盘上的->右方向键到Boot选项:(如果鼠标无法移出请按 Ctrl+Alt 键)将 CD-ROM Drive 的启动级别高于 Hard Drive(上下键选择,增减级别),然后按 F10:选择 Yes 然后回车,此时会重新启动进入:选择中文(简体),然后选择安装 Ubuntu:勾选相关选项,然后点击前进:选择自动分区还是手动分区,这里我们选择自动分区,然后点击前进:点击现在安装格式化完成后会出现:选择地区,这里我们选择默认的就可以了,你也可以选择上海,点击前进:选择键盘两边都选USA就可以了,点击前进:设置用户信息,点击前进:开始安装:安装完成,重启,点击现在重启后:会出现一个提示,回车即可:用刚才设置的用户名登录:此时会出现这样的警告,点击关闭.进入主界面:切换用户成 root 用户:(为了避免因为权限问题产生的错误这里我们直接用root用户登陆)打开终端:此时我们可以用 root 用户登陆了:点击注销 work:、点击切换用户:点击其它:用户名:root密码为上面我们设置的:登陆成功1.4 Linux命令(1)文件和目录命令练习cd /home 进入 '/home' 目录'cd .. 返回上一级目录cd ../.. 返回上两级目录cd 进入个人的主目录cd - 返回上次所在的目录pwd 显示工作路径ls 查看目录中的文件ls –l 显示文件和目录的详细资料ls -a 显示隐藏文件mkdir dir1 创建一个叫做 'dir1' 的目录'mkdir dir1 dir2 同时创建两个目录mkdir -p /tmp/dir1/dir2 创建一个目录树rm -f file1 删除一个叫做 'file1' 的文件' rmdir dir1 删除一个叫做 'dir1' 的目录'rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容rm -rf dir1 dir2 同时删除两个目录及它们的内容mv dir1 new_dir 重命名/移动一个目录cp file1 file2 复制一个文件cp dir/* . 复制一个目录下的所有文件到当前工作目录cp -a /tmp/dir1 . 复制一个目录到当前工作目录cp -a dir1 dir2 复制一个目录(2) 文件搜索find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录find / -user user1 搜索属于用户 'user1' 的文件和目录whereis halt 显示一个二进制文件、源码或man的位置which halt 显示一个二进制文件或可执行文件的完整路径(3)文件权限使用 "+" 设置权限,使用 "-" 用于取消ls -lh 显示权限chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限(4)压缩和解压tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包(5)练习任务①在/home下创建目录test并在其下面用gedit编辑器或VI编辑器新建文件hello.c,修改文件hello.c属性为755。
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是一个代表优化级别的整数。
gcc调试总结
使用GCC编译与GDB调试一:VMwareTools安装过程1.sudo apt-get update2.sudo apt-get dist-upgrade3. 3.sudo apt-get install build-essential4.sudo apt-get install linux-headers-3.0.0-29-generic-pae5.Ubuntu与windows间的文件共享(选择VM中设置,选项,共享文件夹,添加路径,如果不能在Ubuntu下的/mnt/hgfs下找到共享文件夹还需安装Sudo apt-get instatll open-vm-dkmsSudo mount -t vmhgfs .host:/ /mnt/hgfs二:C 编程中相关文件后缀.a 静态库(archive).c C源代码(需要编译预处理).h C源代码头文件.i C源代码(不需编译预处理).o 对象文件.s 汇编语言代码.so 动态库三:Gcc的执行过程gcc and g++分别是gnu的c & c++编译器gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]4.连接目标代码,生成可执行程序[链接器ld]四. 常用编译命令选项假设源程序文件名为test.c。
1.无选项编译链接用法:#gcc test.c作用:将test.c预处理、汇编、编译并链接形成可执行文件。
这里未指定输出文件,默认输出为a.out。
2. 选项 -o用法:#gcc test.c -o test作用:将test.c预处理、汇编、编译并链接形成可执行文件test。
-o选项用来指定输出文件的文件名。
3. 选项 -E用法:#gcc -E test.c -o test.i作用:将test.c预处理输出test.i文件。
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、会提哪行有错。
gcc debug
1。
gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译2。
gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字3。
为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。
4。
-l参数和-L参数-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。
好了现在我们知道怎么得到库名了,比如我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。
放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库? 旁?/usr/X11R6/lib 目录下,我们编译时就要用-L/usr/X11R6/lib - lX11参数,-L参数跟着的是库文件所在的目录名。
gcc编译器使用方法
gcc编译器使用方法一、介绍:GCC(GNU Compiler Collection)是一套由GNU开发的编程语言编译器集合,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等。
在Linux系统中,GCC是最常用的编译器之一,本文将详细介绍GCC编译器的使用方法。
二、安装GCC编译器:在Linux系统中,GCC编译器通常已经预装。
可以通过以下命令检查GCC是否已经安装:```gcc --version```如果GCC已安装,则会显示其版本信息;如果未安装,则需要通过包管理器进行安装,例如在Ubuntu系统中,可以使用以下命令安装GCC:```sudo apt-get install gcc```三、编译C程序:GCC编译器可以用来编译C程序,以下是一个简单的例子:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```将上述代码保存为hello.c文件,然后使用以下命令编译:```gcc hello.c -o hello```其中,hello.c是源文件的名称,-o指定输出文件的名称,这里将输出文件命名为hello。
编译成功后,可以执行生成的可执行文件:```./hello```输出结果将是:```Hello, World!```四、编译C++程序:GCC编译器也可以用来编译C++程序,以下是一个简单的例子:```cpp#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;return 0;}```将上述代码保存为hello.cpp文件,然后使用以下命令编译:```g++ hello.cpp -o hello```其中,hello.cpp是源文件的名称,-o指定输出文件的名称,这里将输出文件命名为hello。
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系统调试工具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后面带上参数可以传递给正在调试的程序。
C语言技术中的调试工具推荐与使用技巧
C语言技术中的调试工具推荐与使用技巧在C语言的开发过程中,调试是一个非常重要的环节。
通过调试,我们可以发现代码中的错误并进行修复,提高程序的稳定性和性能。
而为了更高效地进行调试工作,我们需要使用一些专门的调试工具。
本文将推荐几款常用的C语言调试工具,并分享一些使用技巧。
一、GDB调试工具GDB是GNU开源项目中的调试工具,被广泛应用于C语言的调试中。
它提供了一系列强大的功能,如断点设置、变量查看、堆栈追踪等。
使用GDB进行调试时,我们可以通过命令行界面与其进行交互,也可以使用GUI界面进行操作。
以下是几个常用的GDB命令:1. 设置断点:可以使用“break”命令在代码的某一行设置断点,当程序执行到该断点时会暂停。
例如,“break main”可以在main函数的入口处设置断点。
2. 查看变量:使用“print”命令可以查看变量的值。
例如,“print x”可以查看变量x的值。
3. 单步执行:使用“step”命令可以逐行执行代码,并进入函数内部。
例如,“step”可以进入函数的第一行。
除了这些基本命令外,GDB还提供了许多其他功能,如条件断点、内存查看等。
通过熟练掌握GDB的使用技巧,我们可以更快速地定位和解决问题。
二、Valgrind内存调试工具在C语言开发中,内存泄漏是一个常见的问题。
为了解决这个问题,我们可以使用Valgrind这个强大的内存调试工具。
Valgrind可以检测程序中的内存错误、访问越界、使用未初始化的变量等问题,并给出相应的报告。
使用Valgrind进行内存调试时,我们可以使用以下命令:1. 检测内存错误:使用“valgrind --leak-check=full ./program”命令可以检测程序中的内存错误,并给出详细的报告。
2. 检测访问越界:使用“valgrind --tool=memcheck --track-origins=yes ./program”命令可以检测程序中的访问越界问题,并追踪到具体的源头。
最新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++抛出的异常。
linux sdk命令的用法 -回复
linux sdk命令的用法-回复Linux SDK命令的用法在Linux系统中,软件开发工具包(Software Development Kit,SDK)是一个重要的组成部分,可以帮助开发人员在Linux环境下进行程序开发。
Linux SDK命令提供了一系列工具和功能,用于编译、构建和调试软件。
本文将以Linux SDK命令的用法为主题,详细介绍一些常用的SDK命令,并为每个命令提供一步一步的操作指南。
1. GCC (GNU Compiler Collection) 命令GCC是一个开源的编译器工具,用于将C、C++和其他支持的语言代码编译成可执行文件。
以下是GCC命令的常用选项:-c:只编译指定的源文件,不进行链接-o:指定输出文件的名称-g:在编译过程中生成调试信息-Wall:开启所有的警告信息-I:指定头文件的搜索路径-L:指定库文件的搜索路径下面是GCC命令的使用示例:gcc -c hello.c -o hello.ogcc -o hello hello.o2. GDB (GNU Debugger) 命令GDB是一个功能强大的调试器,用于查找和修复程序中的错误。
它可以在运行时跟踪程序的执行,并提供诸如设置断点、查看变量值、检查堆栈等功能。
以下是GDB命令的常用选项:file:加载可执行文件b:设置断点run:运行程序n:执行下一行代码p:打印变量值bt:查看函数调用堆栈下面是GDB命令的使用示例:gdb hello(gdb) b main(gdb) run(gdb) n(gdb) p i(gdb) bt3. make 命令make是一个构建工具,用于编译和构建项目中的源代码文件。
它通过Makefile文件定义了编译和构建的规则,并根据文件的依赖关系决定哪些文件需要重新编译和构建。
以下是make命令的常用选项:-f:指定Makefile文件的名称-C:指定要执行的目标目录clean:清除生成的文件下面是make命令的使用示例:makemake -f Makefile clean4. git 命令git是一个版本控制系统,用于跟踪和管理项目中的文件。
实验八GCC与GDB
实验八GCC 与GDB一、实验目的(1)熟悉gcc 使用方法(2)熟悉gdb 断点设置二、实验过程(1) 使用gccA :使用vi 创建hello.c 源文件,输入vi hello.c 回车B :输入如图8-3代码C :使用gcc 编译源文件生成可执行文件hello ,输入gcc hello.c -o hello 回车 D:执行文件,输入./hello 回车 (2) 使用gdbA:使用vi创建test.c源文件,输入vi test.c回车B:输入如图8-4代码D:启动gdb,输入gdb回车E:打开test文件,输入file test回车D:显示代码,输入list回车,如图8-5E :在第五行设置断点,输入break 5回车,此时设置了断点1F :运行,输入run 回车,此时程序停止在断点1处,如图8-6所示G :打印h 的值,输入print h 回车H :清除所有断点,输入delete breakpoint 回车,然后输入y I :继续运行程序,输入continue 回车,如图8-7所示J :退出gdb ,输入quit 回车练习:编辑sum.cxx#include <iostream>using namespace std;int main() { //计算a+bint a,b,sum;cout<<"Input a:\n";cin>>a;cout<<"Input b:\n";cin>>b;sum=a+b;cout<<"a+b="<<sum<<endl;return 0;}编译:g++ sum.cxx -o a.out运行:./a.out。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用gdb调试GCC程序 gdb调试GCC程序
gdb是一个用来调试C C++程序的常用调 gdb是一个用来调试C和C++程序的常用调 试工具之一。 gdb所提供的一些功能: gdb所提供的一些功能: 监视程序中变量的值。 设置断点以使程序在指定的代码行上停止 执行。 逐行执行代码。 分析崩溃程序的产生的core文件 分析崩溃程序的产生的core文件
make 命令的使用
make [option] [macrodef] [target] make命令默认的文件是makefile(Makefile), make命令默认的文件是makefile(Makefile), 也可以用“也可以用“-f 文件名”指定要解释执行的文 件。 make默认从文件指定的第一条规则开始执 make默认从文件指定的第一条规则开始执 行,并根据第一条中的依赖文件顺次执行。也 可以通过target直接指定执行的目标。 可以通过target直接指定执行的目标。
gcc与gdb使用 gcc与gdb使用
多个源文件生成一个可执行文件
问题:有多个源文件时,如何生成一个可执行文件? 方法1 方法1:gcc –Wall –o mytest test1.c test2.c test3.c 方法2 方法2: gccgcc-Wall -c test1.c gccgcc-Wall –c test2.c gccgcc-Wall –c test3.c gcc –o mytest test1.o test2.o test3.o
程序自动维护工具make 程序自动维护工具make
简单makefile文件的写法 简单makefile文件的写法 由若干规则组成,每个规则说明一个目标 规则的格式: 目标[属性…] 目标[属性…] 分隔符[依赖文件][;命令菜单 命令菜单] 分隔符[依赖文件][;命令菜单] { <制表符>命令菜单 } <制表符 制表符> 说明:[]表示可选,{}表示可以多次出现 说明:[]表示可选,{}表示可以多次出现 涉及的文件名允许用通配符 例子:c程序test5_1.txt和它的makefile 例子:c程序test5_1.txt和它的makefile
gdb基本用法 gdb基本用法
需要调试的程序,在编译时要使用调试选项。 在默认的情况下,调试符号不会编译到程 序中。调试之后,不需要重新编译程序。 gdb [filename] 出现 (g令
file装入想要调试的可执行文件。 file装入想要调试的可执行文件。 kill终止正在调试的程序。 kill终止正在调试的程序。 list执行一行源代码但不进入函数内部。 list执行一行源代码但不进入函数内部。 next执行一行源代码但不进入函数内部。 next执行一行源代码但不进入函数内部。 step执行一行源代码而且进入函数内部。 step执行一行源代码而且进入函数内部。 run执行当前被调试的程序 run执行当前被调试的程序 quit终止 quit终止 gdb watch使你能监视一个变量的值而不管它何时被改变。 watch使你能监视一个变量的值而不管它何时被改变。 break在代码里设置断点, break在代码里设置断点, 这将使程序执行到这里时被挂起。 make使你能不退出 make使你能不退出 gdb 就可以重新产生可执行文件。 shell使你能不离开 shell使你能不离开 gdb 就执行 UNIX shell 命令。
程序自动维护工具make 程序自动维护工具make
问题:当开发的程序非常庞大,且关系复杂, 手工编译链接非常困难 解决: 利用一个自动系统控制和协调整个程序的创 建过程。在这个自动系统中,程序员可以 定义创建规则并通过这个规则进行项目的 开发。 makefile就是定义这种规则的文件。GNU makefile就是定义这种规则的文件。GNU make 解释执行makefile。 解释执行makefile。
程序自动维护工具make 程序自动维护工具make
make是一种自动生成和维护目标程序的工具。 make是一种自动生成和维护目标程序的工具。 可以调用编译器、连接器等 根据程序各部分的修改情况,重新编译链接目 标代码 输入make命令后,系统自动检测系统文件和以 输入make命令后,系统自动检测系统文件和以 定义的规则,完成整个创建过程