使用gdb调试程序

一篇文章轻松学会使用gdb调试程序的core文件(调试全过程) 阅读详情
一、调试方法:
        首先, gdb到代码的出错处;
        然后, bt(backtrace)看函数堆栈, 确定问题出在那条语句。
        p(print) 打印变量的值,找原因
        up 进入上一层堆栈, 追溯问题出在哪里。
       
二、 gdb 命令集
关于断点的命令:
awatch:
awatch用来为一个表达式设置观察点,在表达式的值发生改变时,或者当表达式的值被读取的时候,程序停止执行。
break:
用于在程序中设置断点 break + 要设置断点的行号
clear:
用于清除断点 clear + 要清除断点的行号
commands:
用于为遇到断点之后执行特定的指令而设置的 command + 断点号
如果commands 之后没有断点号,gdb会将最后一个设置的断点编号作为默认值。
condition:
在满足一定的条件时才在指定的行上设置断点 condition 断点编号 条件表达式
delete:
用于清除断点和自动显示的表达式的命令。与clear的不同之处:clear要给出断点的行号,delete要给出断点的编号。用clear命令清除断点时gdb会给出提示,而用delete清除断点时gdb不会给出任何提示
disable:
让所设断点暂时失效。如果要让多个编号处的断点失效可将编号之间用空格隔开
enable:
与disable 相对
ignore:
这条命令在一定范围内忽略用户设定的断点 ignore N CONT
tbreak:
用于设置临时断点,所谓临时断点就是断点只在设置之后起作用一次。
watch:
与awatch类似


关于数据的命令:
display:
该命令用于显示表达式的值,使用了该命令后,每当程序运行到断点处都会显示表达式的值。 display 表达式 如:display 5*j
info display:
用于显示当前所有要显示值的表达式的有关情况
delete display:
用于删除一个要显示值的表达式,调用这个命令删除一个表达式后,被删除的表达式将不被显示。 delete display 1
disable display:
使一个要显示的表达式暂时无效。可有enable重新使之有效
enable display:
反操作disable diplay
undisplay:
用于结束某个表达式值的显示。同delete display功能相似
whatis:
显示某个表达式的数据类型 如:whatis j
print:
用于打印表达式的值。可以打印内存中从某个变量开始的一段区域的内容。$表示给定序号的前一个序号,$$表示给定序号的向前第2个序号。例如给定序号是5,那么$代表4,$$代表3.如果是print $表示 print 1
print还可用于对变量赋值如print j=8;
print打印内存中从某个部分开始的一块连续空间的内容。如print 开始表达式@要打印的连续空间的大小
ptype:
用于给出类型的定义。疑问ptype与whatis的区别?
set:
set variable 用于为变量赋值 类似print set variable j=9 print j=9

关于文件的命令
add-shared-symbol-files:
该命令用于从动态的连接映射的共享目标文件中装入符号表。
add-symbol-file:
该命令用于从已经动态装入的文件中装入负号表。使用格式是:add-symbol-file FILE ADDR其中FILE给出的是动态装入的文件的名称,ADDR是文件中正文的起始地址。
cd:
改变当前工作目录。
core-file:
使某个文件成为core dump
directory:
用来向源文件搜索目录中添加一个目录
file:
用来装入待调试程序的命令。
list:
list的非空系数的几种形式:
LINENUM:当前文件的LINENUM行
FILE:LINENUM: 指定文件的LINENUM行
FUNCTION:当前文件的FUNCTION函数
FILE:FUNCTION
*ADDRESS列出包含该地址的文件
list 起始行号 截止行号
forward:
用来从列表当前行开始向后查找第一个匹配某个字符串的程序行 forward 匹配的字符串
load:
该命令用于动态的向正在调试的程序中装入文件,并记录它的符号表,准备联接
path:
该命令用于向目标文件的搜索路径中增加目录的,可以使用当前目录的$cwd
pwd:
显示当前工作路径
reverse-search:
从列表当前行开始向前查找第一个匹配的字符串,查找到的行号保存在$_中
search:
同forward
关于程序运行的命令:
cont:
使程序继续执行
handle:
对信号设置处理函数。如:handle 信号 信号处理
信号可以是符号,也可以是数字。如果用all来作参数,则意味着调试器接受除了(信号SIGTRAP和信号SIGINT)之外的所有信号
处理函数:
stop:如果信号发生重新进入调试器,并打印出提示信息;
print:如果信号发生就打印一条提示信息
pass:让程序能看到这个信号发生
jump:
指定程序开始调试的指令和地址 jump 行号或是指令地址
kill:
结束当前程序的调试。
next:
继续程序的运行,越过子程序调用
nexti:
用于单步执行一条语句中的一条指令,它会跟踪到子程序的内部,next用于单步执行一条语句,而nexti用于单步执行一条指令,一条语句可能有几条指令构成。
step:
用于执行一条语句的,也不越过子过程的调用
stepi:
用于执行一条指令的,它不越过子程序的调用,而是跟踪到子过程的内部

关于堆栈的命令:
backtrace:
用来打印栈侦指针的。backtrace 要打印的栈侦指针的个数
frame:
该命令用于打印栈侦的。frame 要打印的编号
select-frame:
指定要选择的栈侦的编号。一般与info frame连用。

info reg:查看寄存器使用情况。
info stack:查看栈。
where:查看当前位置。
up:跳到上一层函数。
down:与up相对。
attach <进程号>:把当前高度的程序粘在某个进程上,用于调试运行中的进程。
ptype <变量or数据类型>:查看变量或数据类型的定义。

 
KUKA机器人与S7-1200 PLC实现Profinet通讯配置步骤详解 在工业自动化产线中,PLC与工业机器人之间的高效数据交换是控制逻辑落地的关键。传统硬接线方案在信号点多时布线复杂、故障排查困难,而现场总线技术通过一根网线即可实现主从设备间的周期通讯。Profinet作为主流工业以太网协议,由S7-1200作为IO Controller主站,KUKA机器人作为IO Device从站,在WorkVisual与TIA Portal中完成设备组态、I/O映射及信号分配,即可替代成捆电缆,稳定传输启停、状态及报警信号。这一方案适用于汽车、3C、物流等行业的自动化产线,尤其适合需要扩 阅读详情

相关推荐

快速配置ORCAD导出智能PDF原理图

在OrCAD 中导出类似Altium Designer的智能PDF(即交互式PDF);

QingNing3028的博客 3948

GDB调试

虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,能够让用户在程序运行时观察程序的内部结构和内存的使用情况。要调试C/C++的程序,首先在编译时,要使用gdb调试程序,在使用gcc编译源代码时必须加上“-g”参数。GDB中的命令很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。说明没有带有调试功能,则不能被调试。/home/minger/share/tencent/gdb/main是程序的路径。1、按照自定义的方式启动运行需要调试的程序。3、程序暂停时的值的监视。

modi000的博客 150

GDB介绍和使用

什么是 GDB GDB 是由 GNU 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境,GDB 是 Linux 和许多类 Unix 系统中的标准开发环境。 一般来说,GDB 主要帮助你完成下面四个方面的功能: 1. 启动程序,可以按照自定义的要求随心所欲的运行程序 2. 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式) 3. 当程序被停住时,可以检查此时程序中所发生的事 4. 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG 生成带调试信息的可执行文件

qq_45135038的博客 828

ArcMap安装与配置全攻略:从下载到实战应用

本文提供了ArcMap 10.4.1从系统准备、详细安装到破解激活的完整指南,并包含首次启动的界面介绍与一个实战GIS分析项目。针对初学者,文章强调了在ArcGIS Pro成为趋势的当下,学习经典ArcMap对于理解核心概念和兼容现有工作流仍有重要价值,帮助用户避开安装常见陷阱,快速上手实战应用。

weixin_29200741的博客 338

麒麟桌面操作系统QT开发环境搭建

麒麟操作系统安装Qt

因为热爱,所以坚持,记录工作中的乐趣 9275

用GDB调试程序

GDB概述 ———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所......

一个不甘于此的弱鸡 1462

保姆级教程:RK3588部署yolo目标检测模型

RK3588部署yolo目标检测模型非常详细的保姆级教程

ling913的专栏 5488

linux使用gdb调试程序完全教程

转自:http://blog.youkuaiyun.com/haoel/article/details/2879 GDB概述 ———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”

因热爱而执着,因执着而成功。 9596

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 723

【100%通过率】华为OD机试真题 JavaScript【数字最低位排序】【最低位排序】

2023华为OD机试真题 JavaScript【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 587

Linux教程第四版(孟庆昌)--思考题 6 答案

思考题六 1. gcc编译过程一般分为那几个阶段?各阶段的主要工作是什么? 答: (1)预处理阶段:读取C语言源文件,对其中以#开头的指令(伪指令)和特殊符号进行 (2)编译阶段:对预处理之后的输出文件进行词法分析和语法分析,在确定各成分都符合语法规则后,将其“翻译”为功能等价的中间代码表示或汇编代码。 (3)汇编过程:把汇编语言代码翻译成目标机器代码。 (4)连接阶段:将一个文件中引用的符号(如...

海到无边天作岸 山登绝顶我为峰 7260

Python接入企业微信群机器人图文教程,实现恐贪指标自动触发微信消息提醒功能!Python 企业微信 群机器人 消息提醒 Webhook 企业微信接口

✅ 企业微信群机器人的添加方式;✅ 如何获取 Webhook 地址;✅ Python 如何用 requests 发消息;✅ 如何在实际业务中触发自动提醒;这种方式不仅适合个人开发者、测试人员,也适用于小团队、运维通知等场景,部署简单、触发灵活、响应及时!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 915

使用gdb调试程序简介

使用gdb调试程序简介一、初始化    输入gdb进入gdb调试环境。或者直接输入gdb + progfile来加载文件。注意该文件是使用gcc(或g++)编译得到的。为了使 gdb 正常工作, 必须使你的程序在编译时包含调试信息,编译时必须使用-g参数来。    或者进入gdb环境后,通过命令file + progfile来加载需要调试的可执行文件文件。    查看源代码:list [函数名][

BlueSoal的专栏 3314

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

如何使用GDB工具来调试程序

官方参考文档:http://www.gnu.org/software/gdb/documentation/ GDB(GNU 项目调试器)可以让您了解程序在执行时“内部” 究竟在干些什么,以及在程序发生崩溃的瞬间正在做什么。GDB 做以下 4 件主要的事情来帮助您捕获程序中的 bug: ◼ 在程序启动之前指定一些可以影响程序行为的变量或条件 ◼ 在某个指定的地方或条件下暂停程序 ◼ 在程序停止时检查已经发生了什么 ◼ 在程序执行过程中修改程序中的变量或条件,这样就可以体验修复一...

m0_37322399的博客 2542

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Windows下安装和使用GDB调试程序

或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你在 UNIX 平台下做开发,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。那么如果我想在Windows下使用GDB调试程序,应该怎么做呢?

荷塘月色 8367

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ubuntu使用GDB调试程序(入门)

嵌入式

MarshalK的博客 441

使用gdb调试程序详解

转载自内部论坛,原文出处不明。 熟练使用gdb是一个linux下开发人员必备的一项技能,我们由浅入深的学习一下gdb的强大功能。 一.gdb简单介绍 名称 gdb - GNU 调试器 提要 gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s sy...

alicezhang8888的博客 141

Linux下使用GDB调试程序的方法

Linux下使用GDB调试程序的方法2008年09月10日 星期三 16:20简要介绍一下是否gdb调试程序的方法:  (1)进入gdb调试:  gdb + 已经编译通过的可执行程序 -》 就进入调试模式。例如:gdb MiddlePublisher  (2)r + 运行时的参数 -》 开始运行可执行程序。例如 r -lxml2 -f refile  

bamboo_ru的专栏 701

Linux下使用GDB工具调试程序

在Linux下调试程序一般用GDB来执行。 这里简要介绍一下是否gdb调试程序的方法:(1)进入gdb调试: gdb + 已经编译通过的可执行程序 -》 就进入调试模式。 例如:gdb MiddlePublisher (2)r + 运行时的参数 -》 开始运行可执行程序。 例如 r -lxml2 -f refile (3)b + 断点 -》设置

Gerald_Jones的博客 673

Linux下,使用GDB调试程序的方法

<br />在Linux下调试程序一般用GDB来执行。<br /> 这里简要介绍一下是否gdb调试程序的方法:<br /> (1)进入gdb调试:<br /> gdb + 已经编译通过的可执行程序 -》 就进入调试模式。<br /> 例如:gdb MiddlePublisher<br /> (2)r + 运行时的参数         -》 开始运行可执行程序。<br /> 例如 r -lxml2 -f refile<br /> (3)b + 断点               -》设置调试的断点

Briver Song的专栏 1393

调试程序GDB的安装和使用

GDB是一种强大的调试程序,可以帮助程序员在调试过程中追踪程序的行为。这些命令只是GDB中的一部分,还有许多其他命令可以用于调试应用程序中的c++代码。:在程序的某个位置设置断点,可以使用行号或函数名。:查看有关程序的信息,如栈帧、局部变量和全局变量。:监视变量的值,当变量的值发生更改时停止程序。:进入函数或到达下一行,用于逐步执行程序。:在每次停止时显示变量的值。:查看GDB命令的帮助文档。:运行程序或重新启动程序。:跳过当前行,不进入函数。:跳过断点,继续执行程序。:从当前函数中返回。

captain 747

使用GDB调试程序

使用GDB调试程序

test1280 557
上一篇: 如何学好VC/MFC
下一篇: C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
lphpc
博客等级 码龄22年 32粉丝 86原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值