• 【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 选项。

     

    1. //test.c
    2. #include
    3. int AddToTarget(int start , int end)
    4. {
    5. int i = start;
    6. int sum = 0;
    7. for(;i <= end;i++)
    8. {
    9. sum += i;
    10. }
    11. return sum;
    12. }
    13. int main()
    14. {
    15. printf("run begin...\n");
    16. int result = 0;
    17. result = AddToTarget(1,100);
    18. printf("resylt : %d \n",result);
    19. printf("run end...\n");
    20. return 0;
    21. }

            先创建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

     

  • 相关阅读:
    python生成中金所期权行权价
    第二章《Java程序世界初探》第4节:实战第一仗--计算圆形面积
    TCP/IP协议
    极智AI | C++ 手写 softmax 激活函数
    门面/外观模式
    公众号推送早安问候以及天气预报(JAVA)
    Java23种设计模式-结构型模式之外观模式
    性格正直的人适合什么职业?
    解析java中的debug模式之异常断点调试
    【小程序】多种功能实现步骤及获取数据/接口
  • 原文地址:https://blog.csdn.net/jupangMZ/article/details/136389557