码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • gdb core调试实践


    文章目录

      • 1.简介
      • 2.GDB启动配置
        • 2.1 服务器启动GDB配置
        • 2.2 代码编译设置
      • 3.基本用法
      • 3.1 GDB常用命令操作
      • 3.2 查看文件是否带有调试功能
        • 3.2.1 执行:gdb 程序名
        • 3.2.2 使用命令:readelf -S main|grep debug


    1.简介

    GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。

    官方说明文档:https://sourceware.org/gdb/current/onlinedocs/gdb/

    在实际应用中,有两种调试方法:在线调试和离线调试。
    离线调试适用于开发测试环境,可以自由启停进程,设置断点;在线调试一般用于现场问题分析,不能随便启停进程,对于技术要求较高。

    2.GDB启动配置

    2.1 服务器启动GDB配置

    如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:

    #设置core大小为无限
    ulimit -c unlimited
    #设置文件大小为无限
    ulimit unlimited
    
    • 1
    • 2
    • 3
    • 4

    2.2 代码编译设置

    若想执行GDB调试,需要在Makefile中添加编译调试选项-g,例如:

    gdb dup_file.c –o dum_file_elf –g –lpthread -O0
    
    • 1
    • -g2 作用是在可执行文件(ELF)中加入源代码的相关信息,比如ELF中第几条机器指令对应源代码的行数。
      -g的完整格式是-glevel,其中level中指定了调试信息中包含了调试信息的多少,默认的是2,level=1最少,level=3最多(包括宏定义等信息)。
    • -O2 作用是让编译器自动优化我们的代码
      -O有4个级别,-O0编译不优化,一般是推荐-O2,设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。
    O级别说明
    O0不做任何优化
    O1做部分优化,对于大函数,优化编译占用较多的时间和相当大的内存,使用本优化,编译器会尝试减小生成代码的尺寸,并缩短生成时间,单并不执行需要占用大量编译之间的优化
    O2比O1更高级的选项,进行更高级的优化,GCC将执行机会所有空间和时间折中的优化,与O1比较而言,O2在优化了编译时间的基础上提高了代码执行效率
    O3O2的基础上打开了更多的优化选项

    3.基本用法

    3.1 GDB常用命令操作

    文件<文件名>加载调用的可执行文件示例
    gdb进入调试程序在这里插入图片描述
    run重新开始运行文件在这里插入图片描述
    start单步执行,运行程序,停在第一执行语句在这里插入图片描述
    list查看源码,简写l在这里插入图片描述
    print打印指针、变量的值在这里插入图片描述
    set设置变量的值在这里插入图片描述
    next单步调试(逐过程,函数直接执行),简写n在这里插入图片描述
    step单步调试(逐语句,跳入自定义的函数内部执行),简写s在这里插入图片描述
    backtrace查看函数调用的栈帧和层级关系,简写bt在这里插入图片描述
    frame切换函数的栈帧在这里插入图片描述
    info查看函数内部局部拜年的数值,简写i在这里插入图片描述
    finish结束当前函数,返回调用点在这里插入图片描述
    continue继续运行,简写c在这里插入图片描述
    quit退出gdb调试,简写q在这里插入图片描述

    3.2 查看文件是否带有调试功能

    3.2.1 执行:gdb 程序名

    如果带有如下提示信息,则说明程序带有调试功能
    在这里插入图片描述

    3.2.2 使用命令:readelf -S main|grep debug

    在这里插入图片描述
    如果有debug说明有调试功能,如果没有debug。说明没有带有调试功能,则不能被调试。

  • 相关阅读:
    32/100 二叉树的层序遍历 33/100 二叉树的最大深度 34/100 平衡二叉树
    搭建Hyperledger Fabric2.x环境
    ubuntu下查看文件(夹)大小的命令
    解决java发邮件错误javax.net.ssl.SSLHandshakeException: No appropriate protocol
    Linux C 线程间同步机制
    【MySQL】内置函数——日期函数
    白杨SEO:有技能专长的人想要做好知识付费的核心是什么?
    关于二叉树插入空节点的占位问题(Python)
    【5G PHY】5G SS/PBCH块介绍(一)
    [山东科技大学OJ]1214 Problem B: 编写函数:字符串的连接 之二 (Append Code)
  • 原文地址:https://blog.csdn.net/mzc_love/article/details/127710761
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号