【Linux杂货铺】调试工具gdb的使用

49bae2e517414f4fb2dc54f8d5a619c2.png


 

目录

🌈前言🌈

📁背景介绍

📁 使用

list [行号] / [函数名] 

run/r

break/b  [行号] / [函数名]

info break

disable break

enable break

delete break [断点编号]

next/n

step/s

continue/c

finish

print/p  [变量] / [表达式]

set [变量]

display  [变量名]

undisplay  [编号]

until

📁 总结


🌈前言🌈

        本期【Linux杂货铺】将讲解Linux中调试工具gdb的使用,各个参数的含义,如何在Linux中将代码调试起来,以及各个参数对应的在IDE中的含义。

 f7ed26b5f18541eb9655a245704f4683.png个人博客:秋刀鱼的滋味@-CSDN博客

 126aa96596b14e769a51621096d7961d.png系列专栏:Linux杂货铺_秋刀鱼的滋味@的博客-CSDN博客

 

📁背景介绍

        在程序发布方式中,有两种模式:debug模式 和 release模式。release模式下是不能进行调试的,所以在开发过程之中,使用的都是debug模式。

        Linux在使用 gcc/g++编译出二进制程序时,默认使用的是release模式。

        要使用gdb调试,必须在源代码生成的二进制程序的时候,加上 -g 选项。

 

//test.c
#include <stdio.h>                             
int AddToTarget(int start , int end)
{
    int i = start;
    int sum = 0;
    for(;i <= end;i++)
    {
        sum += i;
    }
    return sum;
}

int main()
{
    printf("run begin...\n");
    int result = 0;
    result = AddToTarget(1,100);
    printf("resylt : %d \n",result);
    printf("run end...\n");
    return 0;
}

        先创建test.c文件,写入代码。

        通过gcc test.c -o test-debug -g命令,生成test-debug文件。

        最后 gdb test-debug  调试代码

📁 使用

list [行号] / [函数名] 

list / l + 行号:显示源代码,接着上次的位置往下列,每次列10行,知道代码尾。

44e9985ba2e84894a0d99feec8667372.png

list / l + 函数名:列出某个函数的源代码。

ccb08dcc998d483f8f0be4843ac71c21.png

run/r

        运行程序,从开始连续而非单步执行程序。在VS中,相当于F5。

5cd8a94e04fa4f7ebca614be62d07291.png

c4b49b0fa85a498e891ecae38b7960ba.png

break/b  [行号] / [函数名]

        在某一行或者某某个函数开头设置断点。在VS中相当于F9。

cc45fcc8657a42d1b1ca46c82de54bde.png

info break

        查看断点。其中断点是按编号操作的,编号按照创建顺序给出。

cc9e264f3c1f495dbe6f56513a2ff694.png

44aa343b85ab4cbfb2f165cc5d33456e.png

disable break

        禁用断点。

4511c075c8fa4b03bd312c6ef39b9521.png

        Enb表示断点是否启用,是的话参数为y,禁用为n。

enable break

        启用断点。

f1b0669e8409485e99e2d6500e5a194c.png

delete break [断点编号]

        删除断点。        

ba08ef2592da44a0b226fc770dbae100.png

next/n

        单条执行。但必须在程序run之后才能使用。run是调试,但不能一行的操作,所以必须配合断点b来使用n。

        在VS中next相当于F10,逐过程调试,不会进入函数体内部进行查看。

1557d1fbab6f45ba867664df00389310.png

f346a725a475426f881330a0aaf244f0.png

489043f05da7419791bf6ce25a90bb51.png

step/s

        进入函数调用调试。在VS中,相当于F11

b9da1307ba4d45b183d6c77b53cddd46.png

bdd26e4a3618408294a1ad5fb1c72351.png

continue/c

        从当前位置开始连续而非单步执行程序。相当于在执行到断点后,run程序。

b90df00a135b4306b6fed875c56f6655.png

finish

        执行到当前函数返回,然后等待接下来的命令。如我们step到函数内部,不想调试函数内部信息,只想查看函数执行完结果,可以使用finish,

47508e56e39849f98b2a3029e2ef844b.png

print/p  [变量] / [表达式]

        打印变量或者表达式的值。

6d75adba681348468d28dad2de9d5403.png

set [变量]

        修改变量的值。

690bd86248e04707a4f73f3f0f67d89b.png

display  [变量名]

        跟踪查看一个变量,你每次停下都显示它的值。在VS中,相当于监视窗口。

4c9e4843880b4c0fbc7f3e4466df5954.png

undisplay  [编号]

        取消先前的那些变量的跟踪

c7ad800f46a14db893e3f067293503d9.png

until

        跳转到指定行,中间的代码都是运行的。

503f84b16d6e4f069dff20f6a43b2eea.png

📁 总结

        以上,我们就对Linux中调试工具gdb做了讲解,包括了如何生成可调式版的代码,如何去调试等一系列内容,总体上来说非常简单,只需要多加练习即可。

        以上,就是本期【Linux杂货铺】的内容了,如果感觉对你有帮助,欢迎点赞,收藏,关注,Thanks♪(・ω・)ノ。

672be12c4f1b40cbbda500696c820308.gif

 

  • 81
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秋刀鱼的滋味@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值