首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux开发工具——gdb篇

这是因为gdb的list行为是 将要显示的行放在比较靠中间的位置,而不是从所输入的行开始显示。 run(或r)命令 作用: 运行程序。 用法: 直接输入r再回车即可。...用法: info b 测试用例: d命令 作用: 删除断点。 用法: d 断点编号 测试用例:   断点删除 不能根据行号来删除,只能根据断点编号来删除。   ...测试用例:   在vs中,我们可以在调试里的监视窗口对变量的内容或者地址进行显示。   而在Linux下的gdb中,我们使用如下命令来显示变量内容和地址。...p命令 作用: 显示变量的内容和地址 用法: p 变量名 测试用例: display/undisplay命令 作用: 常显示 变量的内容和地址。...用法: display 变量名/取地址和undisplay 编号 测试用例: 作用: 从一个断点运行到下一个断点。 用法: 程序运行时直接输入c回车,从这个断点运行到下个断点。

23510

Biu一下GDB

q=gdb&mkt=zh-cn&FORM=BKACAI http://www.gnu.org/software/gdb/ 一般来说,GDB主要帮助你完成以下四个方面的内容 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序...(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事 4、你可以改变你的程序,将一个BUG产生的影响修正,从而测试其他BUG GDB常见命令 简称 全称 备注 l list...注意在程序开始执行前只能用r,而不能用c n next 执行一条语句。如果有函数调用,则把它当做一个整体 s step 执行一条语句。...如果要实现真正的交换,我们应该传入的是存储变量的地址,此时函数swap的形参类型应该为指针类型 PS: C语言的变量都是放在内存中的,而内存中间的每一个字节都有一个称为地址(address)的编号。...每一个变量都占有一定数目的字节(可以用sizeof运算符获得),其中第一个字节的地址称为变量的地址。

33930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】调试工具gdb的使用

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 前言 在前文,我们已经讲解了vim工具以及gcc/g++的使用,我们可以进行编写代码以及编译代码了...,但是还没有学习如何在Linux下对代码进行调试,通过本章的学习,将学会如何使用gdb对代码进行调试。...打断点 r: 运行程序,无断点的话,直接运行到结束,有断点运行到最近的断点处停止(r不能在断点间移动,即运行到最近断点处后,再次输入r,则会重新再次运行) b(break) 行号 :在某一行设置断点...断点之间跳转(c) 我们知道vs下可以使用f5来进行断点之间的切换,gdb中也可以,命令为c(vs中的f5)(vs中使用f5都是处于调试状态下,因此gdb也是如此) 关于gdb的其它一些指令 gdb的指令还有很多...,以上主要讲了几个比较常用的,下面我将一些指令也都罗列出来,大家感兴趣的可以自己来亲自试验一下: fifinish :执行到当前函数返回,然后挺下来等待命令 print(p) :打印表达式的值,通过表达式可以修改变量的值或者调用函数

    3.4K30

    大厂原来都这么使用IDEA远程调试的!

    在本篇技术博客中,我们将探讨如何使用IDEA进行远程调试。 1 IDEA 配置 首先,我们需要确保我们的开发环境已经准备就绪。我们需要在远程服务器上安装并配置好调试器,如GDB或LLDB。...我们还需要在本地计算机上安装IDEA,并确保我们的代码已经正确地导入到IDEA中。 接下来,我们需要创建一个远程调试配置。...在“Remote”选项卡下,我们需要指定远程服务器的IP地址和端口号,并选择我们所使用的调试器类型。 一旦完成配置,就可启动远程调试会话了。...IDEA将连接到远程服务器,并在本地计算机上打开调试器窗口。 现在,我们可以开始进行调试了。...我 可见,此时你也只能进行 debug,而不能 run: 们可以设置断点、监视变量和执行代码,就像在本地计算机上一样。

    4.2K30

    深入浅出GDB调试器

    所以说GDB调试几乎可以说是Linux程序员必备的基本技能。本文将手把手教你使用GDB调试程序,并带你深入了解什么是GDB调试器。 一、什么是GDB 1....加断点的方式有很多种,下面将逐一介绍: ① b function (直接加函数名)在某个函数 function 处添加断点 在函数 print_array() 处加断点并执行,会停在该函数内部的第一行...⑤ b ±num 通过偏移地址设置断点,+ 表示从当前程序运行行开始,往下数 num 行并设置断点;- 表示当前程序运行行开始,往上数 num 行并设置断点。...val 的值 (gdb)p &val 打印变量 val 的地址 array 类型为 char ,地址每次+1增长1个字节。...这些信息会被存放在一块称为栈帧的内存空间中,并且每一个函数调用都对应一个栈帧(main 函数也有自己的栈帧,称为初始帧)。这些所有的栈帧都存放在内存中的栈区。

    37010

    gdb 调试笔记

    设置跟踪点 或者改变跟踪点命令直到下个tstart命令才会生效;因此,不能在跟踪会话过程中改变跟踪 点的属性。...恢复断点,将文件中的断点打一遍, watchpoints可能会失效 四、保存现场和回溯 (1)gdb 的快照保存 checkpoint: 生成当前状态的快照 info checkpoint:显示快照信息...恢复到某个checkpoint delete checkpoint checkpoint‐id:删除某个checkpoint 值得注意的是 保存快照的进程ID和之前不同 已经写入文件或者关闭设备这些操作不能撤回到原先的状态...快照是对原先进程的复制,所以地址相同,调试的时候可以对地址下断点,而不用管随机化 (2)逆向执行 首先启动record 功能,就可以进行命令回溯 reverse‐continue 缩写rc reverse‐step.../gdb/remote.c里面,将 if (buf_len > 2 * rsa‐>sizeof_g_packet) error (_(“Remote ‘g’ packet reply is too long

    94200

    GDB调试-从入门实践到原理

    在上篇文章中,我们分析了线上coredump产生的原因,其中用到了coredump分析工具gdb,这几天一直有读者在问,能不能写一篇关于gdb调试方面的文章,今天借助此文,分享一些工作中的调试经验,希望能够帮到大家...查看断点列表 break [+-]offset 在当前位置偏移量为[+-]offset处设置断点 break *addr 在地址addr处设置断点 break ... if expr 设置条件断点,仅仅在条件满足时...命令 作用 print &variable 查看变量的内存地址 watch *(type *)address 通过内存地址间接设置断点 watch -l variable 指定location参数 watch...命中判断 gdb将所有断点位置存储在一个链表中。命中判定将被调试程序的当前停止位置与链表中的断点位置进行比较,以查看断点产生的信号。 条件判断 在断点处恢复指令后,增加了一个条件判断。...当程序到达这个地址时,不是发出int 3信号,而是进行比较。特定寄存器的内容和某个地址,然后决定是否发送int 3。因此,当你的断点位置被程序频繁“通过”时,尽量使用硬件断点,这将有助于提高性能。

    3.1K30

    arm裸板驱动总结(makefile+lds链接脚本+裸板调试)

    而且在复制数据到sdram之前,执行的代码里都不能用静态变量、全局变量、以及数组,因为这些初始值量的地址与位置有关的,必须将nand的内容复制到sdram地址中,才能用. 2.4比如,下面memsetup...将文件下载到2440的某个地址上,或读取出某个地址到文件中 查询CPU当前状态、中断CPU运行、恢复CPU运行、复位CPU等 设置CPU的地址断点,比如设置为0x30000000,当CPU运行到这个地址时...4个字节长,部分MCU拥有多套指令集,长度不固定,如下图所示:  rbp 删除地址 addr 处的断点 bp 打印断点信息 3.3.2通过GDB对JATG实现源码级别的调试  在linux...中,使用arm-linux-gdb软件 在win7中,则使用arm-none-eabi-gdb软件 使用GDB工具,就不需要像上个OCD调试那么麻烦了 1)比如说,想在“int i=0;”处打上断点:...OCD调试: 就需要查看调试的反汇编文件,找到i=0所在的运行地址,然后通过命令在地址上打断点 GDB调试: 则可以直接在i=0处的源码上打断点,后台会通过带调试信息的编译文件,来找到i=0处的运行地址

    1.5K90

    php调试利器之phpdbg

    在php5.6和之上版本将内部集成。...主要功能: - 单步调试 - 灵活的下断点方式(类方法、函数、文件:行、内存地址、opcode) - 可直接调用php的eval - 可以查看当前执行的代码 - 用户空间API(userland/user...然后下载phpdgb的源码包,并放在php源码包的sapi目录下。最后,你就可以执行命令安装了。编译安装示例如下: 假设我们已经下载php的源码包,并放在了/home/php目录下。...设置断点 设置断点的命令和gdb一样。都是break,简写形式为b。不过具体的命令参数还是有所差异的。和gdb的断点命令相同之处,它们都可以“按文件名:行号” 或者 行号的方式设置断点。...查看断点 和gdb一样,phpdbg也是使用info break命令查看断点。

    1.4K10

    GDB的那些奇淫技巧

    当然目标程序是没有符号的,而且我希望下的断点是一个动态地址。在 lldb 中有--wait-for,gdb 里却没有对应的命令,经过多次摸索,终于总结出一个比较完美的解决方案。...我们的调试目标是断点在子进程的strcpy中,拓展来说是希望能断点在子进程的任意地址上。...噢,断点都打不上,理由很简单,因为不同进程之间的虚拟地址空间都不一样。 另外一个回答中说了,虽然不能断在指定地址,但我们可以break main,告诉 gdb 把断点设置在 main 函数。...child (gdb) b _start Breakpoint 1 at 0x7fbfb4c30090 实际上该断点也不会触发,因为这个地址是是父进程的地址空间。...{regexpr} 匹配正则的函数前断点,如 ex_* 将断点 ex_ 开头的函数 tbreak function/line 临时断点 hbreak function/line 硬件断点 ignore

    1.3K20

    【Linux】常用工具(下)

    ,清理放在最后。...(2)那么为什么不是伪目标就不能总是被执行呢?...进阶版本(实际应用) 在实际应用中我们的进度条一般都应用在下载软件中,下面我们就简单以下载一个软件为例,简单实现一下这个代码: 首先我们实现函数的实现部分: // 不能一次将进度条打印完毕,否则无法平滑的和场景结合...1. git clone 我们使用 git 主要是将自己的代码存放到远程仓库中,这里我们以 gitee 为远程仓库,在Linux中上传自己的代码;首先我们要在gitee中创建一个仓库,如下: 随后我们将仓库的地址复制...总结 我们使用的 gdb 指令都是以常见的为主,其他的请大家自主学习,下面我们总结一下我们的 gdb 指令: 查看代码:l + number 打断点:b + number 删断点

    21010

    第35问:InnoDB 刷脏页慢,会影响我的业务么?

    然后我们在 thread 13 上打一个断点(我们为什么知道要在 pc_sleep_if_needed 处打断点呢?留待晚点解释): ?...紧接着就会看到 thread 13 停在了断点上,这根线程目前就停下来,不会再进行刷脏页了。 再来看一下各个线程的状态,有 1 号线程和 13 号线程停了下来: ? 我们将 1 号线程放开: ?...然后将 gdb 放在一边,现在开始给 MySQL 上压力,还是用我们常用的方法: ? 不停执行最后一句,会发现 insert 会卡住,观察一下 innodb status: ?...那么为什么我们不能继续进行业务呢? 我们将 innodb metrics 打开: ? 观察相关的 metrics: ?...本实验中我们只停下了一个线程,大家也就可以验证这个传说不十分靠谱,所有的刷脏页都是通过专门的线程进行,处理 SQL 的线程只能提出刷脏页的需求,而不能直接动手。

    89240

    如何实现一个Lua调试器

    实现 下面是具体实现的细节,既然期望是gdb风格,那么很显然,我们不能修改源程序,不管是c部分还是lua部分。所以我们需要一个第三方的程序来附加到目标进程上,然后开始调试。...,去获得每个函数对应的内存地址,例如: gdb -p PID -ex "p (long)luaV_execute" --batch 最后,在这个地址,使用hookso的argp功能,即在这个地址加一个断点...初始化的事情,放在了hook_handler中执行,也就是当lua完全执行完一行的时候,由lua的回调函数来驱动逻辑。 同理,当退出调试,调用stop_agent,也是这样的处理机制。...还有条件断点其实也是很有用的,在gdb中,比如b my_test_func if a == 1,只有当a == 1,才会断住。...然后我们定义一个临时函数,将参数和语句都拼进去: function dlua_debug_if1(a) return a == 1 end 这样每次执行到断点所在的语句时,只需要塞入a对应的值,

    2.2K30

    【Linux调试工具】gdbcgdb

    设置断点:允许在程序的特定位置暂停执行,以便检查程序状态。 单步执行:逐行执行代码,观察每一行的影响。 查看变量和内存:实时查看程序中的变量值及内存地址等内容。...我们可以来看看 可以看见确实是右debug信息 将编译的程序编程debug模式之后,我们就可以进行调试工具的学习了。...如何打断点和取消断点 打断点: b 需要打断点行数/某个函数 两种打断点的方式,第一种是将断点打在某一行上,第二种是将断点打在某个函数上。...设置状态: enable/disable 断点编号 可以看见disable可以将断点设置为禁用状态,禁用状态和删除状态不一样,禁用状态只是不用,但是断点是存在的。...逐语句调试 n n可以进行逐语句调试,但是n不能进入函数。 可以看见这里我们是没有进入函数的,直接把函数当成了一个整体,跳到了下一个语句,这里n就等价于vs中的f10.

    15510

    GDB调试学习

    简介 GDB是GCC的调试工具。其功能如下: 启动程序,使程序按自定义形式运行; 使程序停止指定断点位置; 程序停止后,检查程序执行中的相应情况; 动态改变程序执行环境。...gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。...主要用于汇编调试 b *地址> // 停在代码的某个地址处 d // 删除断点 info b // 查看断点 r:运行被调试的程序。...如果之前没有设过断点,则执行完整个程序;如果设过断点,则程序停在第一个断点处。 c:继续执行被调试程序,直到到下一个断点,或程序整体结束。...q:退出gdb调试环境。 help [命令名称]:gdb帮助命令,提供对GDB各种命令的解释说明。

    1.4K20

    【Linux】Linux调试器-gdb使用

    如果加上“,”发现不能用。 试一下空格:发现也不行 所以断点不允许连续去打,而必须一个一个去打: 而这里的断点编号是3和4,因为1和2在前面已经用了。...那么在gdb下怎么知道哪些地方打了断点呢?...在gdb下用的是d加文件名加行号,发现不能用 删断点就要用这里的Num: 删除一号断点: d 1 再删除2号断点 此时已经没有断点了。...3.7 print/p查看变量内容及地址 print/p查看变量内容及地址 在vs里面常用的监视窗口: 而在gdb中用到的命令就是: print/p 来试一下: 这时就能看到i对应的值了...: 查里面的地址就加上取地址符就行: 3.8 display常显示 每次都先输入p才能查看监视的内容,太麻烦,就用display来进行常显示,每次都自动变化: display 它也可以来查看地址

    18210

    Linux探秘坊-------6.gdb

    而Linux下的gcc/g++默认都是release环境,是没办法直接用gdb调试的,那么有什么解决办法嘛?...有的,兄弟有的: 在我们之前自己编写的makefile文件中:加入-g 这样make出来的可执行程序就满足进行调试的要求哩 2.认识gdb 先创建一个mycode.c 用vim写入:区间求和小程序 #...printf("running done, result is: [%d-%d]=%d\n", start, end, n); return 0; } 这里会显示有错误,因为C89里int是不能放在...输入quit即可退出gdb 3.gdb命令详解 有兄弟发现gdb好难用呀,有木有更加简单好用的呢?...var+变量= … ————————仅在调试过程中改变变量的值,但退出gdb后值不改变 这里用 p 查出原来result值为5050,使用 set var result =1,改变了result的值,

    6000

    GDB调试入门,看这篇就够了

    本文以C程序为例,介绍GDB启动调试的多种方式。 哪类程序可被调试 对于C程序来说,需要在编译时加上-g参数,保留调试信息,否则不能使用GDB进行调试。...根据函数名设置断点 同样可以将断点设置在函数处: b printNum 程序在调用到printNum函数的时候会断住。...打印指针指向内容 如果还是使用上面的方式打印指针指向的内容,那么打印出来的只是指针地址而已,例如: (gdb) p d $1 = (int *) 0x602010 (gdb) 而如果想要打印指针指向的内容...查看内存内容 examine(简写为x)可以用来查看内存地址中的值。...gdbStep #启动调试 (gdb)b #将断点设置在12行 (gdb)run #运行程序 Breakpoint , main () at gdbStep.c:

    7.7K62

    GDB调试还不会?看这篇就够了!

    本文以C程序为例,介绍GDB启动调试的多种方式。 哪类程序可被调试 对于C程序来说,需要在编译时加上-g参数,保留调试信息,否则不能使用GDB进行调试。...根据函数名设置断点 同样可以将断点设置在函数处: b printNum 程序在调用到printNum函数的时候会断住。...打印指针指向内容 如果还是使用上面的方式打印指针指向的内容,那么打印出来的只是指针地址而已,例如: (gdb) p d $1 = (int *) 0x602010 (gdb) 而如果想要打印指针指向的内容...查看内存内容 examine(简写为x)可以用来查看内存地址中的值。...gdbStep #启动调试 (gdb)b 25 #将断点设置在12行 (gdb)run #运行程序 Breakpoint 1, main () at gdbStep.c:

    4.9K21
    领券