【C语言gdb调试】

GDB是一个强大的Linux下程序调试工具,主要用于C/C++程序。它可以设置断点、运行、查看变量、修改程序等。通过-g参数添加调试信息,-o指定输出文件,-c仅编译不链接。GDB与GCC/g++配合使用,GCC是C编译器,g++是C++编译器,二者在处理C++时有区别。掌握GDB的基本调试命令如break、run、next、step等,能有效提升程序调试效率。
摘要由CSDN通过智能技术生成

程序员写在编写程序的时候不可能是一帆风顺的,gcc编译器可以发现程序代码的语法错误,但不能发现程序的业务逻辑错误,调试程序是软件开发的内容之一。调试程序的方法有很多种,例如可以用printf语句跟踪程序的运行步骤和显示变量的值,本文介绍一个功能强大的调试工具gdb。

1.什么是GDB,能干啥?

gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。

一般来说,GDB主要帮助你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

(来自百度百科)

2.GDB调试的对象

GDB主要来调试C/C++语言写的程序,当然也就可以调试其他语言程序。这里我们只说C/C++(其他语言我也不会呀)
GDB调试一定要是可执行文件而不是.c文件
要用gcc进行编译,具体的命令如下:

gcc -g 源文件.c -o 输出的目标文件
-g,-o参数缺一不可
3.基本调试命令
命令命令缩写命令说明
breakb设置断点,b 20 表示在第20行设置断点,可以设置多个断点。
runr开始运行程序, 程序运行到断点的位置会停下来,如果没有遇到断点,程序一直运行下去。
nextn执行当前行语句,如果该语句为函数调用,不会进入函数内部执行。
steps执行当前行语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。注意了,如果函数是库函数或第三方提供的函数,用s也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去。
printp显示变量值,例如:p name表示显示变量name的值。
continuec继续程序的运行,直到遇到下一个断点。
quitq退出gdb环境。
set var name=value设置变量的值,假设程序有两个变量:int ii; char name[21];set var ii=10 把ii的值设置为10;set var name=“西施” 把name的值设置为"西施",注意,不是strcpy。
set args设置主程序的参数。 例如:./book119 /oracle/c/book1.c /tmp/book1.c 设置参数的方法是:gdb book119(gdb) set args /oracle/c/book1.c /tmp/book1.c:

注意,在gdb环境中,可以用上下光标键选择执行过的gdb命令。

4.相关的其他内容:
什么是gcc,它能干什么?

GCC(GNU Compiler Collection)即GNU编译器套件,属于一种编程语言编译器,其原名为GCC(GNU C Compiler)即GNU c语言编译器,虽然缩写一样但是功能上区别很大。GCC的初衷是为GNU操作系统专门编写的一款编译器,原本的GNU是专用于编译C代码,现如今已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了。这篇文章主要介绍gcc或g++的使用。

GCC、gcc、g++三者有何关系?

gcc(GUN C Compiler)是GCC中的c编译器,而g++(GUN C++ Compiler)是GCC中的c++编译器。
  gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。

gcc -g -o -c分别是什么意思

简单说:

-g 可执行程序包含调试信息
-o 指定输出文件名
-c 只编译不链接

1、-g为了调试用的 ,加个-g 是为了gdb 用,不然gdb用不到
2、-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,
gcc就给出预设的可执行文件a.out。

一般语法:

gcc filename.c -o filename
上面的意思是如果你不打 -o filename 那么默认就是输出filemame.out.这个-o就是用来控制输出文件的。 

3、-c 只编译不链接,产生.o文件,就是obj文件,不产生执行文件

参考于:C语言技术网_gdb调试

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千北@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值