gdb调试

Linux的gdb调试 Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。Debug 版本的生成:因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。所以debug版本的体积要大一些。gcc -c hello.c -g —> 生成包含调试信息的中间文件或者。 阅读详情

gdb调试技术

  • 编译时需要编译为调试模式,否则无法调试

    • 命令行编译:g++ -g test.cpp -o test需要加上-g参数

    • CMakeLists.txt: set(CMAKE_BUILD_TYPE "Debug")或

      cmake .. -DCMAKE_BUILD_TYPE="Debug"

    • readelf test | grep -i debug 查看是否有调试符号

    • 也可以通过gdb test 运行是否有No debugging symbols found in test等输出信息

  • 开始调试

    • gdb test
    • gdb test core,用gdb同时调试一个运行程序和core文件
    • gdb attach pid_number: 也可以对服务的pid进行attach调试;
    • 运行: run,或者直接执行gdb后,使用file test再run;
  • 运行时参数

    • –args: gdb --args test “hello” 20 true
    • 在执行gdb test后,使用set args “hello” 20 true达到同样效果
    • show args: 查看命令列参数
  • 运行环境

    • path或show paths: 查看当前环境的path变量值
    • set environment varName[=value]: 设置环境变量
    • show environment varName: 查看环境变量
  • 查看工作目录

    • cd : 相当于执行shell cd命令,跳转到$HOME目录;
    • pwd: 显示当前所在的目录;
    • gdb -cd ./demo test: 加上-cd选项,命令行指定指定工作目录,执行该命令后,pwd显示为./demo目录
  • 程序的输入输出

    • 将程序的运行结果输出到文件: run >test.log,运行时重定向到文件中;
  • 断点设置

    • break lineNumber: 在当前文件指定行设置断点

    • break function:在当前文件指定函数设置断点,c++中key使用

      class::function或function(type,type)格式来指定函数名称

    • break filename:lineNumber

    • break filename:function

    • break [args] if [cond]: 当【cond】这个运算为真时,设置中断点,args可以能是以上

      任意一种形式;

    • rbreak regex: 使用正则表达式来寻找可能的函数,并在其进入点设置中断点;

    • break *address: 在程序运行的内存地址设置断点;

    • info break [n]: 查看断点信息, n表示断点号;

  • 设置观察点

    • watch expr: 用于观察变量或表达式值得变化,变化时就停住程序;
    • rwatch expr: 当表达式值或变量被读取时,停住程序
    • awatch expr:当表达式的值或变量被读取或被写时,停住程序
    • info watchpoints:查看所有的观察点;
  • 设置捕捉点(catchPoint)

    • 可以设置捕捉点来捕捉程序运行时的一些事件。如载入共享库(动态链接库)或 是c++的异常。
    • 设置捕捉点格式:catch event,当event发生时,event可以是下面的内容
    • throw: 一个c++抛出的异常;
    • catch:一个C++捕捉到的异常;
    • exec、for、vfork等系统调用(hp-ux系统有用)和load(载入共享库)
    • tcatch event:只设置一次捕捉点,当停住以后,应点被自动删除;
  • 维护停止点

    • clear: 可以跟[文件名]行号或函数名,若未指定,则清除所有断点;
    • delete: 同clear;
    • disable [breakpoints]: 禁用指定的停止点,若未指定,则停用所以的断点
    • enable [breakpoints]: 启用指定停止点,若未指定,则启用所以的断点;
    • enable [breakpoints] once range: 所指定的停止点一次,当程序停止后,该停止点马上被gdb自动disable
    • enable [breakpoints] delete range:所指定的停止点一次,当程序停止后,该停止点马上被gdb自动删除
  • 断点菜单

    • break function: 若function重名或调用多次的话,则会列举出所有的

      可能出现的详细位置,0-表示取消,1-表示所有设置断点,其他则设置相应的

      断点,比如2 4 6;

  • 恢复运行和单步调试

    • continue©:继续执行直到下一个断点;
    • step(s):单步跟踪,若是函数调用,则会进入该函数;进入函数前提是该函数被编译有debug信息;
    • next(n):同样单步跟踪,若是函数调用,则不会进入该函数;
    • set step-mode on: 打开step-mode模式,于是在进行单步跟踪时程序不会因为没有debug信息而不停住;有利于查看机器码
    • finish: 运行程序,直到当前函数完成返回,并打印函数返回值和参数等信息;
    • until(u): 执行一行程序,若此时程序是在for、while、do等循环最后一行,则一直执行到循环结束后的第一行程序后停止;
  • 信号

    • gdb有能力在你调试程序的时候处理任何一种信号,你可以告诉gdb需要处理哪一种信息,你可以要求gdb收到你所指定的信号时,马上停住正在运行的程序,以供你进行调试,handle命令来完成这一功能
    • handle signal keyworlds
    • nostop
    • stop
    • print
    • noprint
    • pass
    • noignore
    • nopass
    • ignore
    • info signals
    • info handle
  • 线程

    • break linespec thread threadno: 程序是多线程,则可以定义断点是否在所有的线程上,

    或是在某个特定的线程,break linespec thread threadno if expr

  • 查看栈信息

    • backtrace(bt)

    • frame(f) n:切换栈

    • up n: 表示栈的上面移动n层,n可以省略,表示向上移动一层

    • down n:表示栈的下面移动n层,n可以省略,表示向下移动一层

    • info args: 打印当前函数参数及其值;

    • info locals: 打印当前函数中所有局部变量及其值;

    • info catch: 打印出当前函数中的异常处理信息;

  • 查看源程序

    • list: 显示当前行后面的源程序;
    • list -: 当前行前面的源程序;
    • list lineNumber: 显示程序的第Number行周围的源程序;
    • list function: 线程函数名为function的函数的源程序;
    • set listsize count: 设置一次显示源代码函数,默认是当前行的上、下5行;
    • show listsize: 查看当前listsize的设置;
    • list fist last: 显示区间直接的源代码;
    • list , last: 显示当前行到last之间源代码;
    • list fist,:显示first到当前行源代码;
  • 搜索源代码

    • forward-search(search) regexp: 向后搜索源代码
    • reverse-search regexp: 向前搜索;
  • 源代码的内存

    • info line :命令来查看源代码的内存中的地址,info line后面可以根行号、函数名、文件名:行号、文件名:函数名;
    • disassembler [func]: 查看源程序或函数当前执行时的机器码,会把目前内存中的指令dump出来
  • 查看运行时的数据

    • print (简写p)或同义命令inspect: 查看当前程序运行的数据
    • print /: 输出格式,比如print /x i: 将变量i以16进制打印出来;
GDB远程调试 gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。要用gdb调试程序,必须在编译时加上-g和-ggdb选项,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。 阅读详情

相关推荐

GDB c++ 调试

GDB c++ 调试程序编译1. 安装gcc (CentOS):2. 编译GDB debug1. 安装 gdb2. 进入调试环境3. 基本操作4. 设置断点 程序编译 首先,在debug之前要对程序进行编译,可以用 gcc 进行编译。 检查是否安装 gcc: rpm -qa | grep gcc 若没有gcc, 请先安装。 1. 安装gcc (CentOS): yum -y install gc...

weixin_44387066的博客 1373

GDB调试命令详解

GDB是什么 调试程序 程序中出现的语法错误可以借助编译器解决;但逻辑错误则只能靠自己解决。实际场景中解决逻辑错误最高效的方法,就是借助调试工具对程序进行调试。 所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。 也就是说,通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低

Hello World 9万+

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1169

gdb调试详解

一、gdb调试coredump文件 二、gdb调试多线程       【Note】:

青萍之末的博客 1万+

九齐NY8A051F低功耗模式全解析:从待机到休眠的省电实战

本文全面解析台湾九齐NY8A051F MCU的低功耗模式,从待机到休眠的省电实战技巧。通过实测数据展示四种工作模式的电流消耗差异,提供模式切换的标准流程和唤醒时序优化策略,并分享外围电路省电设计和低电压检测的实战应用,帮助开发者实现物联网设备的超长续航。

weixin_30839881的博客 413

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1900

GDB调试

转载至从 0 开始学习 Linux 系列之「08.15 个 gdb 调试基础命令」 此处仅想保存下来自己记录 gdb 简介 gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都直接在命令行中用 gdb 来调试程序,相比 Windows 上的集成开发环境 IDE 提供的图形界面调试,一开始使用 gdb 调试可能会让你感到生无可恋,但是只要熟悉了 gdb 调试的常用命令,调试出程序会很有成就感,一方面因为这些命令就类似图形界面调试按钮背后的逻辑,另一方面用命令行来调试程序,逼格瞬

小白的成长 1万+

从Multibit到Debanking:芯片设计中的时序优化完整流程解析(含真实案例)

本文深入解析芯片设计中Multibit技术与Debanking的时序优化完整流程,结合7nm移动SoC真实案例,详细探讨Multibit的核心优势、实施条件及潜在风险,并提供Debanking的触发时机与操作策略。通过平衡Multibit与Debanking,工程师可有效优化PPA(Power-Performance-Area),提升芯片设计效率。

weixin_30316097的博客 462

gdb调试小结

一、启动 1、gdb 2、调试在线进程 (1)启动gdb时链接目标进程 (2)gdb中链接目标进程: (3)断开链接: 二、信息显示 1、栈信息 2、变量 3、寄存器 4、内存 5、源代码 6、显示格式 三、断点 1、设置断点 2、 查看、删除断点 3、设置无效、有效断点: 4、条件断点 5、监视点 6、断点命令 四、其他 1、强制函数返回 2、强制调用函数 参考 ...

milletluo的博客 1万+

YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇)

某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。

qq_36130719的博客 208

基于多智能体的自动化公司调研系统

在当今竞争激烈的商业世界中,了解公司的详细信息对于投资者、合作伙伴和研究机构等具有重要意义。传统的公司调研方式往往需要耗费大量的人力、物力和时间,且容易出现信息不全面、不准确等问题。基于多智能体的自动化公司调研系统的目的是利用多智能体技术,实现公司调研的自动化和智能化,提高调研的效率和准确性。本系统的范围涵盖了公司基本信息收集、市场竞争力分析、财务状况评估等多个方面。本文将按照以下结构进行组织:首先介绍系统的核心概念和相关联系,包括多智能体系统的原理和架构;

架构师的AI之路,分享AI应用开发架构的学习与实践。 967

如何使用GDB调试

文章目录一、GDB的介绍二、GDB的使用三、使用GDB调试实际例子 一、GDB的介绍 GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。 二、GDB的使用 GDB的使用条件 程序要用GDB调试,需要添加调试信息。 添加方法: gcc的-g选项为程序添加调试信息。 例如:gcc –g –o helloworld helloworld.c 启动GDB 启动方法: gdb [程序名称

Harriet的博客 6559

论文必备 - YOLO26统计数据集中大、中、小目标数量,附完整代码和详细使用步骤

数据集是由微软开发维护的大型图像数据集。数据集标注类型对应任务包括物体检测、关键点检测、实例分割、stuff分割(没有特定形状的物体),全景分割人体关键点, 人体密度检测等。官网数据规模和样本特点数据规模大:总共包含32.8万张图像)。其中标注过的图像超过 20 万张,拥有 150 万个目标实例,数据量丰富,能够为模型训练提供充足的信息。类别丰富:包含80个目标类别和91个“stuff”类别。目标类别涵盖了日常生活中常见的各种物体,如人、动物、交通工具、生活用品等;stuff。

Limiiiing的博客 266

GDB调试大全

GDB详细调试大全

m0_60524373的博客 4127

SXU—软件测试方法和技术-朱少民-第四部分 软件测试流程和规范-附考点

软件测试方法和技术-朱少民-第四章 软件测试流程和规范—这本书最后一部分的考点整理,考点分析

weixin_63597914的博客 1752

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

gdb调试总结

在 root用户下,就在/root目录, 在 home用户下就在/home目录下,定义一个.gdbinit文件即可,不存在可以新建一个。然后在文件里面写上gdb命令Apache Web Server 源码为例,源码目录里面有一个.gdbinit文件set $i = 0elseendendend# 省略部分代码。

u010185392的博客 1491

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++调试@认识GDB调试

GDB(GNU Debugger)是Linux及Unix环境中常用的程序调试工具,windows 下也有许多移植版可以用深入理解程序执行:GDB命令行提供了对程序执行流程的底层控制,帮助你更深入地理解程序的运行机制。通过手动控制每一步执行,你能够更细致地观察变量变化、函数调用、内存状态等,这对于复杂问题的排查非常有帮助。轻量级和灵活性:相比IDE,GDB是一个轻量级工具,尤其适合远程服务器或资源受限环境下的调试。

xuchaoxin1375的博客 1369

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

GDB调试命令

GDB是Linux下常用的程序调试工具,主要用于排查语法和逻辑错误。

weixin_45888613的博客 903

GDB调试技巧

gdb (运行程序):gdb lt-snmpd

blog 2632
上一篇: 二分查找法
下一篇: 安装openssl Makefile:688 configdata.pm报错
最后冰吻free
博客等级 码龄12年 121粉丝 371原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值