首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C编译: 使用gdb调试

为了使用gdb对进行调试,必须使用-g选项(在编译时生成debugging信息): $gcc -g -o test test.c mean.c 生成main可执行文件。...,需要说明文件名: (gdb) list mean.c:1 可以具体说明所要列出的程序行的范围: (gdb) list 5, 15 即显示5-15行的程序。...在gdb中,当程序运行到该位置时,程序会暂停,我们可以查看此时的程序状况,比如变量的值。 我们可以在程序的某一行设置断点,比如: (gdb) break 16 将在test.c的第16行设置断点。...; } printf("%d \n", np->element); } 程序可以成功编译,但运行将返回: Segmentation fault 可以使用gdb来查找问题。...Updata: gdb命令可以只输入首字母的缩写,比如c代表continue,b代表break,q代表quit。

1.2K70

C语言GDB调试技术(一)

stdio.h> int main(){ int a = 1; char* ch = "hello world"; printf("%s\n",ch); return 0; } 那么我编译的时候使用...gcc -g -o t t.c ? 2、gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。...这里不得不说下ulimit参数(耐心等候,我在C语言的调试教程完结后会给大家分享ulimit的内容) 3、gdb 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程.../t &后台执行,也可以在另外一个终端里./t执行。 然后ps -ef|grep t 正则找出我准备要调试的进程 ? 然后先gdb进入 ? 这样,我就可以查看当前进程的信息调试。...如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为: catch 当event发生时,停住程序。event可以是下面的内容: 1、throw 一个C++抛出的异常。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言:---gdb多线程调试

    continue,c,fg三个命令都是一样的意思。 step 单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译有debug信息。...F、在不同语言中使用GDB GDB支持下列语言C, C++, Fortran, PASCAL, Java, Chill, assembly, 和 Modula-2。...一般说来,GDB会根据你所调试 的程序来确定当然的调试语言,比如:发现文件名后缀为“.c”的,GDB会认为是C程序。...并且,如果你当前的程序是由几种不同语言一同编译成的,那到在调试过程中,GDB也能根据不同的语言自动地切换语言环境。这种跟着语言环境而改变的功能,真是体贴开发人员的一种设计。...下面是几个相关于GDB语言环境的命令: show language 查看当前的语言环境。如果GDB不能识为你所调试的编程语言,那么,C语言被认为是默认的环境。

    2.2K20

    C语言编译过程

    如果用一张图来表示: image.png 编译编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序...采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。...预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。 包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。...另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。 特殊符号,预编译程序可以识别一些特殊的符号。...4.汇编过程 汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。

    1.9K20

    使用gcc编译gdb调试

    gcc 在linux系统中,默认是没有安装gcc编译器的,可以通过命令 rpm -q | grep gcc  来查看。...安装命令为: yum -y install gcc 安装后,编写一个.c结尾的文件。 gcc test.c  就会默认输出一个a.out的输出文件,这个输出文件就是可执行文件。...如果加上-o选项,则可以自定目标文件。 gcc -o test test.c test就是它的可执行文件。 一般都默认加上-Wall 选项,可以自动提示一些出错警告的信息。...gcc -Wall -o test test.c gbd 以上就是常用的gcc相关知识了。下面就是它的调试,调试通常使用gdb。...在编译的时候需要加上选项-ggdb3选项 gcc -ggdb3 -Wall -o test test.c 这样在没有出错的情况下 gdb test 就进入调试窗口 输入下面命令可以进行如下的操作: break

    2.1K70

    叙述 C语言编译

    @(C语言)[code] 用一段简单的代码,探讨下从C代码到最终可执行文件的编译过程,追根究底。 偶尔了解下底层,也就没那么多莫名其妙了。...工作原因有时候会用python写写测试工具,感受到其快速实现应用的便利,但由于偏底层开发,主力语言依然是C。对于开发语言没有什么优劣概念,在特定的情景下哪种实现更佳就用哪种,工具合适才是最好的。...个人开发环境 ubuntu 14.04 ---- 编译的作用 相比python,lua等脚本语言解释执行方式,编译C是为了提高程序的运行效率。...把对用户友好的语言文本编译成对机器友好的特定指令直接执行,而不是执行时一条一条通过解释器解析执行,很大地提高了执行的效率。对应C主要用于底层,系统层次,追求高性能表现,亦或者,平台资源限制。...$ gcc -S -fdump-rtl-expand hello.c 使用clang(<-编译器)也可以查看输出中间过程: $ clang-3.5 -S -emit-llvm hello.c clang

    1.8K11

    C语言编译过程

    保留#pragma编译器指令。(1)设定编译器状态,(2)指示编译器完成一些特定的动作。...代表接下来的文本应该被当做包含一个隐式的extern "C编译 1.高级语言->汇编代码 命令 gcc -S a.i -o a.s .file "a.c" .globl _...链接 使用到了C标准库的东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,将翻译成的二进制与需要用到库绑定在一块。...动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。...-L/path -lxxx -o test 动态库的话: gcc -fPIC -shared file1.c -o libxxx.so 也可以分成两部来写: gcc

    1.9K20

    C语言】预编译

    6 Mar 15 2022 07:38:23 main 1 拓展知识点 #error: 可以进行自定义编译器报错....#line: 可以定制化你的文件名以及代码行号(__FILE__&__LINE__) #pragma:用于指定计算机或操作系统特定的编译器功能(#pragma message ("str"))不会报错条件是否存在...比如↓ 调试行的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。 举出下面的例子代码如下↓ 在这里会举出两个例子①参与编译、②不参与编译。...C ​ 常见条件编译指令 #if指令 该指令检测表达式值是否为真。...大家可以自己上手用代码描述一下。 ⒊条件编译在哪些地方使用? 通常用于中大型项目当中会使用到条件编译以及版本之间的维护(某某软件完全版和精简版)当然条件编译可以完成一些其它的事情。

    87210

    C语言笔记】C语言编译的过程

    下面以windows环境下的test.c为例,test.c里的代码为: #include int main(void) { printf("This is a test program...2、预处理(Preprpcessing) 使用预处理器把源文件test.c经过预处理生成test.i文件,预处理用于将所有的#include头文件以及宏定义替换成其真正的内容。...预处理的命令为: gcc -E test.c -o test.i 上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。 预处理之后得到的仍然是文本文件。...3、编译(Compilation) 使用编译器将预处理文件test.i编译成汇编文件test.s。...汇编过程的命令为: gcc -c test.s -o test.o 上述命令中-c、-o让汇编器把汇编文件test.s转换成目标文件test.o。

    12.2K31

    C语言系列】C语言编译流程分析

    前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。...保留所有的#pragma编译器指令,因为编译器需要使用它们 通常使用以下命令来进行预处理: gcc -E hello.c -o hello.i 参数-E表示只进行预处理 或者也可以使用以下指令完成预处理过程...cpp hello.c > hello.i /* cpp – The C Preprocessor */ 直接cat hello.i 你就可以看到预处理后的代码 2....gcc其实是后台程序的一些包装,根据不同参数去调用其他的实际处理程序,比如:预编译编译程序cc1、汇编器as、连接器ld 可以看到编译后的汇编代码(hello.s)如下: .file "hello.c...语义分析:静态语义(在编译可以确定的语义)、动态语义(只能在运行期才能确定的语义)。

    10.9K51

    c语言编译器在线-c在线编译器(c语言在线编程)

    c编译器-c语言编译器是干什么用的   本人不才,仅就个人意见谈谈:   1。...什么是编译器:   简单的说,编译器是一种将高级语言经过其解释,翻译成可以运行的二进制代码(有可能是汇编代码,但这种方式处理不一样,还有编译成其他形式的如JAVA是编译成"字节码文件"),再通过它的连接程序就调用了系统内部的一些库...注意:API是你的编译器提供的,也就是说你可以直接用他,而不需要写很多的底层的代码了,如果要很明确的说的话,就是一个应用程序接口需要很多的底层代码才能写出,而在你使用的C语言中只是一个语句而已,包括你写一个定义变量的语句...c语言编译器哪个好?   g++,icc.   ...-c++ source file,在头部加上   #   #   然后就可以编译c语言写的了   C++编程软件   这个永远没有统一的标准。

    6.9K50

    C语言编译和链接

    一、翻译环境和运行环境 在c语言的实现中,存在两个环境 翻译环境:在这个环境中源代码被转换成可执行的二进制指令 运行环境:实际执行代码 二、翻译环境 翻译由编译和链接两个过程组成 编译可以分为预处理...、编译、汇编三个过程 一个c语言的项目一般是由多个.c文件一起构建的,多个.c文件通过如下步骤生成可执行程序: ①多个.c文件单独经过编译器,编译处理生成对应的目标文件 ②多个目标文件和链接库一起经过链接器处理生成最终的可执行程序....i文件中不再包含宏定义,所有的宏定义已经被展开了,我们可以通过查看预处理后的.i文件来确认宏定义和头文件是否包含正确 2、编译 编译的过程就是将预处理后的文件进行语法词法的分析和优化,生成汇编代码 ①...根据汇编指令和机器指令的对照表一一翻译,不做指令优化 4、链接 然后就是链接,链接就是把一堆文件链接在一起生成可执行程序,它的过程主要包括:地址和空间的分配、符号决议、重定位等 重定位:当我们使用多个.c文件生成一个可执行程序的时候...需要手动操作,也可能是通过可执行代码置入只读内存完成 2、程序执行:程序执行便开始调用main函数 3、开始执行程序代码:开始执行程序代码时程序将使用一个运行时堆栈,存储函数的局部变量和返回地址,程序同时也可以使用静态内存

    8210

    C语言编译与链接

    前言 我们想一个问题,我们写的C语言代码都是文本信息,电脑能直接执行c语言代码吗?...肯定不能啊,计算机能执行的是二进制指令,所以将C语言转化为二进制指令需要一段过程,这篇博客讲一下编译与链接,来一起探讨C语言是如何转化为二进制指令的。...其实翻译环境是由编译和链接两个大的过程组成的,而编译可以分解成:预处理(有些书也叫预编译)、编译、汇编三个过程。...一个C语言的项目中可能有多个 .c 文 件一起构建,那多个 .c 文 件如何生成可执行程序呢? • 多个.c文件单独经过编译器,编译处理生成对应的目标文件。...结束语 本篇博客总结了编译和链接涉及C语言的有关知识,其实很多内部的细节无法展开总结。

    11410

    C语言---编译和链接

    其实翻译环境是由编译和链接两个⼤的过程组成的,⽽编译可以分解成:预处理(有些书也叫预编 译)、编译、汇编三个过程。...编译可以分为三个过程:预编译编译、汇编 每个源文件经过编译器的编译处理生成了对应的.obj文件(目标文件) 每个.c文件经过编译器的编译处理单独生成对应的目标文件 //声明外部函数 extern int...• 多个.c⽂件单独经过编译器,编译处理⽣成对应的⽬标⽂件。...所以当我们⽆法知道宏定义或者头⽂件是否包含正确的时候,可以查看预处理后的 .i ⽂件来确认。...: 将c语言中的代码转换成汇编代码 在这个阶段做到了 词法分析、语法分析、语义分析及优化这几个步骤 词法分析 对于下面的代码,编译器会进行怎么样的语法分析呢?

    7210

    C语言详解(预编译

    前言 本篇文章将详细介绍编译过程中预编译的具体细节 在C语言的学习中部分人可能会忽视这一部分的学习,因为像VS这样相对强大的集成开发环境,我们在写好代码后只需要开始执行即可,所以部分人认为这一部分不值得我们花费时间去学习...其实不然,学习C语言编译过程可以帮助我们更深入地了解C语言编译过程和语法特性,提高代码编写的效率和质量,以及拓展编程技能 1、预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预编译阶段处理的...__FILE__:正在编译的源文件的文件名 __LINE__:文件当前的行号 __DATE__:文件被编译的日期 __TIME__:文件被编译的时间 __STDC__:如果编译器遵循 ANSI C,其值为...#endif 或者 #pragma once 就可以避免头文件的重复引入。 总结 预编译C语言编译过程的第一阶段,在预编译阶段可以对源代码进行预处理,如宏定义、头文件包含等。...通过学习预编译过程,可以更全面地理解C语言代码的编译过程。 预编译指令能够简化代码结构、提高代码的重用性和可维护性。学习预编译过程可以帮助程序员更好地利用预编译指令优化代码结构,提高代码的质量。

    9510

    c语言编译

    c语言编译器是一款涵盖丰富学习资料的软件,用户可以在线一键学习辅导c语言编译器在线,可以满足用户的学习需求,能够为用户带来优质的服务,随时都可以在软件上学习各种有趣编程知识。   ...软件特色   1、资源丰富   用户可以在软件上找到丰富的C语言教程,能够看到很多不同的编程资源,轻松地去学习;   2、不断更新   软件上的素材资源会不断地更新,可以让用户轻松地学习,能够在线学习到很多实用知识...;   3、满足需求   软件可以满足用户的学习需求,通过软件就可以直接去软件中学习,能学到自己没学过的;   4、功能完善   用户可以在线编译自己需要的编译的代码,支持编译多种不同的编程语言,让学习更方便...软件亮点   1、很多简单的功能都可以在这里找到,用户可以在线管理自己代码,一键重排代码格式;   2、能够轻松地在软件上进行编译,能够验证一些小程序的真实性,提供了核心编辑功能;   3、不需要电脑就可以学习编程了...软件优势   - 编译迅速,软件的编译速度非常迅速,能够直接将编译完成的代码放在眼前,轻松查看;   - 智能联想c语言编译器在线,拥有联想功能,可以帮助用户快速地输入常用语句,不输完整也会有完整词;

    2.1K10
    领券