GDB
文章平均质量分 90
Stoneshen1211
笨鸟后飞慢慢飞。。。
展开
-
GDB再学习(12):gdb server的使用
关于GDB Server的使用,在以前已经介绍过了,这里只是为了做个标记,归属于这个系列的文章。海思GDB + GDB Server调试(适用于小内存设备)原创 2021-11-07 17:12:07 · 766 阅读 · 0 评论 -
GDB再学习(11):如何生成Core文件
文章目录1 确认core文件开关是否开启2 修改core生成路径和文件格式前面简单介绍了GDB相关的调试经验,但是在资源有限的嵌入式设备中,很难跑的了GDB ,因此就需要程序异常时候生成的core文件来解析程序的堆栈信息,这时候就需要对linux系统进行一些设置,用于程序异常时候可以生成core文件。1 确认core文件开关是否开启我们输入指令ulimit -a# ulimit -acore file size (blocks, -c) 0data seg size原创 2021-10-07 19:33:37 · 3039 阅读 · 0 评论 -
GDB再学习(10):线程调试相关
文章目录1 介绍2 代码准备3 指令介绍3.1 线程启动相关打印信息3.2 查询指定id线程或全部线程信息 info threads [id]3.3 切换当前线程 thread thread-id3.4 为当前线程设置一个名称 thread name [name]3.5 查找与regexp匹配的线程信息 thread find [regexp]3.6 在location指定的位置处建立断点,断点的作用范围为指定ID的线程内 break location thread thread-id [ if cond原创 2021-09-05 16:57:12 · 1407 阅读 · 0 评论 -
GDB再学习(9):断点调试之事件断点
文章目录1 事件断点2 程序准备3 指令介绍3.1 捕获信号 catch signal [signal... | ‘all’]1 事件断点gdb中还提供了catch命令以便我们捕获调试期间的事件,包括信号、程序开始、程序终止和C++中的异常(exception)等。以上引用自《专业嵌入式软件开发 全面走向高质高效编程》在gdb官方的文档中,可以设置以下事件(具体解释可参考官方文档):指令throw [regexp]rethrow [regexp]catch [原创 2021-08-08 13:42:25 · 1011 阅读 · 1 评论 -
GDB再学习(8):断点调试之数据断点
文章目录1 数据断点2 程序准备3 指令介绍3.1 监控变量,使用变量名 watch var3.2 监控变量,使用变量地址 watch addr1 数据断点当调试程序时,如果发现所定义的一个数据结构中的某一变量总是被意外地改变,查出这类问题的根源并不容易。如果处理器能提供一种功能----当某一变量的值被改动时能自动停下来就好了,这样就可以通过调用栈找到问题的根源。这就是引入数据断点的目的。数据断点与硬件断点很相似,需要在处理器的寄存器中设置所监视数据变量的内存地址。当被监视的内存单元被修改时处理原创 2021-07-11 10:00:50 · 4791 阅读 · 0 评论 -
GDB再学习(7):断点调试之硬断点
文章目录1 硬件断点2 程序准备3 指令介绍3.1 设置硬断点 hbreak3.2 设置一次有效硬断点 thbreak1 硬件断点在嵌入式系统中,如果想调试的程序不是位于内存中,而是位于像闪存这样的存储器中,此时就无法使用软件程序断点了,因为闪存中的内容并不像内存那样方便更改。此时只能使用硬件程序断点来调试程序。硬件程序断点的实现原理与软件程序断点完全不同,断点时通过配置处理器的断点寄存器的方式来实现的。当处理器运行到断点寄存器所指示位置的指令时就会产生中断,调试工具通过该中断使我们获得干预的原创 2021-05-23 18:43:07 · 2984 阅读 · 0 评论 -
GDB再学习(6):断点调试之软件断点
文章目录1 断点简介2 软件断点3 程序准备4 指令介绍4.1 通过函数名设置断点 break func [ if cond ]4.2 通过行号的方式来设置断点 break line_number [ if cond ]4.3 通过文件名和行号的方式来设置断点break file.c:line_number [ if cond ]4.4 一次有效指令 tbreak4.5 与正则表达式regex匹配的所有函数上设置断点 rbreak regex4.6 查看断点信息 info breakpoints4.7 使断原创 2021-05-23 18:42:36 · 1712 阅读 · 0 评论 -
GDB再学习(5.4):常用指令介绍_ptype/whatis_查看程序符号表
文章目录1 指令说明2 代码准备3 指令测试3.1 ptype xxx3.2 whatis xxx1 指令说明ptype和whatis都可以用来查看符号表。2 代码准备使用如下代码进行测试#include <stdio.h>#include <string.h>#include <signal.h>#include <stdlib.h>int j = 0;int test2(){ char* s8Buf = NULL; s原创 2021-04-05 13:44:19 · 1721 阅读 · 1 评论 -
GDB再学习(5.3):常用指令介绍_backtrace_查看函数栈
文章目录1 指令说明3 指令测试3.1 打印最里面的N帧 bt n3.2 打印最外面的N帧 bt -n3.3 打印栈帧并打印局部变量的值 bt full1 指令说明backtrace(简写bt)可以查看程序的调用栈。每帧显示一行,如果有多个帧,它会以当前的帧为第0帧,然后再到调用它的帧为第1帧,依次类推。如下,main调用test2函数,当前帧(第0帧)为test2函数。(gdb) bt#0 0x0000000000400576 in test2 () at test_gdb.c:12#1原创 2021-04-05 13:43:41 · 2729 阅读 · 0 评论 -
GDB再学习(5.2):常用指令介绍_examine_查看内存区域的数值
文章目录1 指令说明代码准备1 指令说明examine指令可以查看指定内存地址中的值。examine的用法为:examine /nuf addr其中:指令说明n表示要打印的单元个数;u表示单元的大小;f表示打印格式。u的值如下:指令说明b字节h双字节w四字节g八字节f的值如下:指令说明x16进制d有符号的10进制,默认格式u无符号的10进制o8进原创 2021-03-14 18:30:48 · 1969 阅读 · 0 评论 -
GDB再学习(5.1):常用指令介绍_print/display_查看变量或寄存器中的值
文章目录1 说明2 代码准备3 指令测试3.1 显示某个变量的值 print /d i3.2 显示某个变量的地址 print /a &i4 高级用法5 display1 说明print指令可以查看某个变量的值或者地址。print的用法为:print /fmt expression其中,fmt表示显示的格式,如下:指令说明x16进制d有符号的10进制,默认格式u无符号的10进制o8进制t2进制a地址c字符f原创 2021-03-14 18:30:26 · 2470 阅读 · 0 评论 -
GDB再学习(5):常用指令介绍
文章目录1 基本指令2 调试相关3 断点相关4 线程相关下面汇集一些gdb调试时候,常用的指令,部分指令后再后续的文章中进行说明。1 基本指令指令说明set args xxx传递参数xxxset var修改变量的值file xxx载入目标程序xxxattach pid通过PID链接程序start/s启动运行 程序会停在main()函数的开始处continue/c继续运行run/r运行程序quit/q退出gdb2 调原创 2021-02-20 16:03:36 · 929 阅读 · 0 评论 -
GDB再学习(4):程序准备
文章目录1 增加-ggdb编译选项1.1不加此选项调试信息1.2 添加此选项的调试信息2 不要strip3 不要-O/-O2/-O3在使用GDB调试程序前,还需要对我们编写的程序做一些准备工作,这样可以使我们的程序在出现错误的时候呈现出更多的细节。我们使用如下测试程序进行说明:#include <stdio.h>#include <string.h>int test2(){ char* s8Buf = NULL; strcpy(s8Buf, "8888");原创 2021-02-20 16:02:40 · 534 阅读 · 0 评论 -
GDB再学习(3):GDB的启动和运行
文章目录1 启动1.1方式11.2 方式21.3 方式32 运行3 退出在前面,我们已经编译了GDB,接下来我们将简单的介绍下GDB是如何启动和运行的。1 启动一般有三种方法来运行GDB和程序,具体如下。1.1方式1这种方式我们调试时候经常使用的,如下:gdb test_gdb其中,test_gdb为要调试的可执行程序。下面的启动方法和上面的是等价的直接输入GDB,然后再GDB运行之后,在输入指令 file xxx1.2 方式2gdb test_gdb pid上面pid为程原创 2021-02-20 16:02:05 · 2243 阅读 · 0 评论 -
GDB再学习(2):编译
文章目录1 源码下载2 PC上GDB编译3 嵌入式设备GDB交叉编译1 源码下载直接去gdb官网下载相关的源码2 PC上GDB编译在pc上编译GDB,直接使用如下指令:#./configure --prefix=$(pwd)/_install#make #make install–prefix=$(pwd)/_install 为要安装的路径3 嵌入式设备GDB交叉编译直接使用如下指令:./configure --host=arm-linux-gnueabihf --target=ar原创 2021-01-17 19:48:19 · 606 阅读 · 0 评论 -
GDB再学习(1):前言
GDB是我们程序调试中的利器,经常用在程序异常时候查看堆栈信息、或者断点方式查看程序的执行过程、或者直接单步等方式进行调试等等,是我们嵌入式开发中不可或缺的技能。平常使用GDB调试程序,但是过一段时间再用的时候,一些不常用指令又被遗忘了,只记得一些印象很深的指令,然后查资料才想起来如何使用(估计是老了,记忆力不太好了)。秉承着好记性不如烂笔头的观念,趁着周末有空,好好总结下GDB使用方法,防止以后遗忘时候还要查找。在总结的时候,参考了以下的资料,特此再次说明,后续就不再说了:1.GDB官网http原创 2021-01-17 19:47:54 · 752 阅读 · 1 评论