导航:首页 > 源码编译 > 调试时对c语言编译的目的

调试时对c语言编译的目的

发布时间:2025-03-29 14:48:39

❶ 【C-32】C语言调试工具gdb

GDB(GNU Debugger)是GCC的调试工具,主要用于帮助开发者完成以下四个方面的功能:

当程序运行的结果与预期不符合时,可以使用gdb进行调试。需要注意的是,在使用gdb调试时,需要在编译时添加-g参数。如果没有添加-g参数,将无法看到程序的函数名、变量名,而是显示运行时的内存地址。

以【C-30】C语言gcc编译器和静动态库的四个简单函数为例,以下是修改后的Makefile($(CC) -g -c $< $(CPPFLAGS)):

启动gdb:gdb program

其中,program指的是你的执行文件,通常位于当前目录下。设置运行参数,启动程序,退出gdb时使用quit。

GDB可以打印出所调试程序的源代码,前提是在程序编译时添加了-g参数,将源程序信息编译到执行文件中。当程序停下来后,GDB会报告程序停在了哪个文件的第几行上。使用list命令可以打印程序的源代码,默认打印10行。list命令的用法如下所示:

一般是打印当前行的上5行和下5行,默认是10行。当然,你也可以定制显示的范围。使用下面命令可以设置一次显示源程序的行数。

list可以简写为l。

断点操作包括:简单断点、多文件设置断点、查询所有断点、条件断点、维护断点。其中,break命令用于设置断点,可以简写为b。在进入指定函数时停住,可以使用指定文件和行号设置断点。查询所有断点可以使用info breakpoints命令。

条件断点通常使用if关键词,后面跟其断点条件。设置一个条件断点,可以使用如下命令:

维护断点可以使用delete命令删除指定的断点,其简写命令为d。如果不指定断点号,则表示删除所有的断点。range表示断点号的范围(如:3-7)。

比删除更好的一种方法是disable停止点,disable了的停止点,GDB不会删除,当你还需要时,enable即可,就像回收站一样。

查看变量的值可以使用watch命令,自动显示变量的值可以使用display命令。使用set var命令可以修改变量的值,例如:set var width=47(将变量width值设置为47)。

main函数的第一个参数是主程序,后面是自己的参数。

设置参数并显示,例如:set args yifan nihao。

在项目中进行地址切词部分的debug时,可以按照以下步骤操作:

1. 编译部分添加-g参数:sudo g++ -O3 -lpthread -std=c++11 -g wb_word_cut.cpp -I/u03/wb/addr_i1_cpp/addr_20/dict/include -o /u03/wang/addr_i1_cpp/addr_20/run_wb/wb_word_cut_gdb

2. 开启gdb,并输入参数:

3. 设置断点,使用list查找要打断点的位置,设置断点。

4. 测试,查看效果情况:

❷ C语言文件的编译与执行的四个阶段并分别描述

C语言程序的执行经历了四个主要阶段:预处理、编译、链接和运行。以下是这四个阶段的详细描述:
1. **预处理阶段**:
在这个阶段,C语言源代码被预处理器(C Preprocessor, CPP)处理。预处理器会处理所有包含的文件指令(如#include),展开宏定义(如#define),并处理条件编译指令(如#ifdef、#ifndef)。预处理后的结果被保存为扩展名为.i的文件。
2. **编译阶段**:
编译器接下来对预处理后的.i文件进行编译。编译过程包括词法分析(识别源代码中的单词和符号)、语法分析(检查单词和符号的组合是否符合C语言的语法规则)、语义分析(确保代码有意义,比如变量使用前已经定义)以及代码优化。编译的最终产物是一个或多个扩展名为.s的汇编语言文件,以及一个.o的目标文件,该文件包含了可以被计算机处理器直接执行的指令。
3. **链接阶段**:
链接器将一个或多个目标文件.o合并成一个可执行文件.exe。在这个过程中,链接器还会处理程序中调用的外部函数,确保这些函数在程序运行时可以被找到。如果程序中使用了标准库函数,链接器会连接到这些函数所在的库文件上。
4. **运行阶段**:
最后,可执行文件.exe在计算机上运行。操作系统加载该文件到内存中,并从程序的入口点开始执行指令,直到程序结束或者遇到中断(如用户输入、系统调用等)。
通过这四个阶段,C语言源代码最终被转换为可以在特定处理器上执行的程序。

❸ C语言中 debug error是什么错误啊

debug error 是调试过程中产生的错误。

在调试过程中,运行时会插入额外的代码检查参数的合规性,操作的合法性等等(在发布版中,为提高效率则不会插入这些检查)。

这些可以检查出一些符合语法但不符合逻辑的行为。 debug error 就是在检查不满足(参数不合规,操作不合法)时产生的错误。

(3)调试时对c语言编译的目的扩展阅读:

C语言#error使用方法

编译程序时,只要遇到#error就会跳出一个编译错误,既然是编译错误,要它的其目的就是保证程序是按照你所设想的那样进行编译的。

下面举个例子:

程序中往往有很多的预处理指令

#ifdefXXX

...

#else

#endif

当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了XXX时,就可以改成如下这样进行编译:

#ifdefXXX

...

#error"XXXhasbeendefined"

#else

#endif

这样,如果编译时出现错误,输出了XXXhasbeendefined,表明宏XXX已经被定义了。

❹ C语言中编译 生成 调试 测试 运行各是什么意思有什么区别

C语言中编译 生成 调试 测试 运行的区别如下:

区别一:

从编译方面来看:

编译依赖于编译器,英文是compile, vc中这一过程是将源代码转换成目标文件,如:obj文件,rc文件等。

区别二:

从生成方面来看:

生成指的是连接的过程,英文是build,依赖于链接器。vc中在这一阶段将所有的目标文件和所有需要用到的组件组合成一个整体,例如需要生成的是windows系统下的PE可执行文件,链接器会依照特定格式将目标文件组合,最后生成PE格式的,exe或dll文件。

区别三:

从调试方面来看:

调试是所有或部分代码编写完成后,让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在问题。

区别四:

从运行方面来看:

运行就是让程序在系统中运行。

(4)调试时对c语言编译的目的扩展阅读:

C语言的介绍:

C语言是目前流行的通用程序设计语言,是计算机专业人员和计算机爱好者开发软件的首选开发工具。C语言源程序必须经过某种编译工具翻译成为目标机器语言程序才能够在计算机上执行。

然而随着程序编写规模的扩大,顺利编写出正确的程序绝非一件容易的事情,早期的许多编译工具仅仅提供翻译功能,已满足不了应用的要求,编程人员需要-种功能全面并高度集成的编译环境。

程序是一段具有一定功能的代码,编写程序的目的是解决问题。当程序人员写完程序后,其实并不起作用,只有当编写的程序经过一系列的处理后,能够解决问题时。

序才成为真正的程序,这一系列的处理过程,-般就是编辑、编译、连接、调试与运行等。目前最成熟的C语言集成环境主要有Turbo C2.0和Turbo C 3.0( 简称TC30)或Borland C++3.1( 简称BC31)以及Visual C++ 6.0。

阅读全文

与调试时对c语言编译的目的相关的资料

热点内容
海马压缩机多少钱一个 浏览:120
地铁逃生安卓怎么找回账号 浏览:898
松下扫地机怎么连app 浏览:446
怎么连接阿里云服务器windows系统 浏览:979
java7linux 浏览:940
怎么加密公司文件 浏览:24
华为程序员岗位招聘信息 浏览:5
手机发票保存哪个文件夹 浏览:658
源码定制网站源码 浏览:551
程序员素养的书 浏览:183
zk解压旧版本 浏览:720
linux关机按钮 浏览:936
程序员成长能力 浏览:573
云主机快还是服务器快 浏览:800
公积金app怎么申请公积金 浏览:467
电机的额定电流算法 浏览:41
君威怎么连手机app 浏览:630
证书被加密 浏览:655
下大封城命令 浏览:494
哪个APP可以看欧洲篮球 浏览:421