首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Hi, Python

    GDB 调试

    本文链接:https://blog.csdn.net/weixin_40313634/article/details/88619906 实验楼值GDB常用命令实战课程学习记录 1. 安装工具: sudo apt-get install gdb 2. 编译可调式程序: gcc bugging.c -o bugging -g -m32 -o: 生成的可执行文件的名字。 -g: 生成的程序允许gdb 调试。 -m32:生成32位的程序。默认,程序位数和OS位数相同。 编译32位程序时报错:fatal error: sys/cdefs.h: 没有那个文件或目录。 调试: 开始调试gdb bugging 结束调试:quit 断点在循环中时: enable once Num // 断点hit 一次后,失效。 设置断点 info breakpoints 显示断点信息 delete d 删除断点 print p 打印值 until u 执行到指定行 continue c 继续运行 run r 执行程序,启动调试

    1.9K30发布于 2019-09-29
  • 来自专栏各类技术文章~

    GDB调试

    这些section里保存了调试信息,目前ELF文件采用DWARF 3(Debug With Arbitrary Record Format)标准的调试信息格式。 使用GDB你可以: 1. 回车在GDB相当于重复上一个命令。 启动GDB运行程序 运行GDB调试a.out程序有以下几种方式: 方式一:直接运行gdb,然后在gdb中执行“file a.out”加载程序。 “gdb a.out 19475”来调试运行中的a.out。 通过cd命令可以更改目录,pwd显示当前所在目录 准备就绪后就可以真正开始用GDB调试程序了。 暂停、恢复程序运行 调试程序,首先是要让程序是某些感兴趣的点上停下来,GDB有以下几种方式通知GDB暂停程序的运行:断点、观察点、捕捉点(GDB中这三种都统称为断点breakpoints)、信号、线程停止

    2.8K10编辑于 2021-12-24
  • 来自专栏ljw

    gdb调试

    理解 自己总结 gdb会记住历史命令,按一次n,回车以后再回车还是n -g才是debug debug才有调试信息,默认的没有 mycode是可执行程序,再gdb这个可执行程序 q退出/quit list 和取消常显示类似,不能直接取消那个字母,要用取消编号的方式 打完断点后,r在编号1的位置停下了,next/n(n是逐过程,相当于F10),按一下就就进入了下一行,并且会跳过空行 命中次数变成1了 s进入过程,逐行调试 F11相当于,s进入函数后如果没有函数需要进入了,n和s就一样了F10和F11,也是如此 p相当于查看窗口 display i,可以常显示内容,边调试,边显示 取消常显示,不能直接取消那个字母,要用取消编号的方式

    41810编辑于 2024-10-18
  • 来自专栏【计网】Cisco

    GDB调试技巧】提高gdb调试效率

    gdb的启动 准备内容 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。 gdb program core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。 gdb program 1234 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。 GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb的help查看。 gdb技巧 1. gdb小技巧汇总 gdb技巧挺多的,比如说直接回车是继续执行上一次的代码 巧用tab补全 1. 3.2 方式二:f 在过程中,f 命令的功能是帮助了解当前执行的代码所在的位置,特别是在调试过程中出现错误时,可以帮助确认错误发生的地点。

    71310编辑于 2024-04-23
  • 来自专栏云深之无迹

    GDB调试学习

    简介 GDB是GCC的调试工具。其功能如下: 启动程序,使程序按自定义形式运行; 使程序停止指定断点位置; 程序停止后,检查程序执行中的相应情况; 动态改变程序执行环境。 gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。 举例如下: 启动gdb调试的方法有以下三种: 常用的调试有以下几种: b <行号> // 停在程序的指定一行 b <函数名称> // 停在程序的某个函数处 b *<函数名称> // 停在编译器生成的prolog q:退出gdb调试环境。 help [命令名称]:gdb帮助命令,提供对GDB各种命令的解释说明。 如果指定了“命令名称”参数,则显示该命令的详细说明;若果没有指定参数,则分类显示所有GDB命令,共用户进一步浏览和查询。 cd dir:运行GDB,使用dir作为gdb的工作目录。

    1.8K20发布于 2020-10-23
  • 来自专栏编程珠玑

    GDB调试指南-启动调试

    本文以C程序为例,介绍GDB启动调试的多种方式。 哪类程序可被调试 对于C程序来说,需要在编译时加上-g参数,保留调试信息,否则不能使用GDB进行调试。 ,不能使用gdb调试调试启动无参程序 例如: 1$ gdb helloWorld 2(gdb) 输入run命令,即可运行程序 调试启动带参程序 假设有以下程序,启动时需要带参数: 1#include<stdio.h> 调试core文件也很简单: 1gdb 程序文件名 core文件名 具体可参看《linux常用命令-开发调试篇》gdb部分。 调试已运行程序 如果程序已经运行了怎么办呢? 20829 总结 本文主要介绍了两种类型的GDB启动调试方式,分别是调试未运行的程序和已经运行的程序。

    2K20发布于 2019-09-02
  • 来自专栏半生瓜のblog

    【Linux】GDB调试

    GDB调试 GDB是GUN发布的一个强大的程序调试工具,也是Linux程序员不可或缺的一大利器。 安装GDB 注意安装你所需要的版本。 wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz tar -zxvf gdb-8.1.1.tar.gz cd gdb-8.1.1 . /configure make make install ---- 启动GDB 使用GDB的前提。 gcc -g hello.c -o hello 启动GDB调试。 s ---- 监视变量 print 调试程序最基本的需求就是监视变量的值,可以使用print命令,缩写为p,显示指定变量的值。 bt ---- 退出GDB quit 调试完毕后,使用quit命令,缩写为q,退出gdb程序。 q

    5.1K50编辑于 2023-05-13
  • 来自专栏xcywt

    gdb 自动调试

    记录一些GDB调试相关的东西。 coredump设置无限大小。 如下:就是自动将coredump文件进行调试,会打印出来调用堆栈。可以自行重定向到指定文件中,方便统计问题。 MobileServer:是调试程序。 整了一个脚本: echo "GDB调试工具. gdb --batch --quiet -ex "thread apply all bt full" -ex "quit" $EXE_NAME $core_file_new > $outFile cat

    50220编辑于 2023-08-26
  • 来自专栏jiajia_deng

    gdb 调试基础

    如果使用gdb调试,这种问题就可以迎刃而解了。gdb 可以完全操控程序运行,让程序走就走,让程序暂停就暂停,还可以随时查看程序运行时内部变量的值等信息。 使用 gdb 调试程序必须保证符合以下两个条件。 程序可以正常编译通过 程序编译时,必须用 -g 选项 // 加入 -g 选项时程序可以被调试 gcc main.c -o main -g 【开始调试】 要调试一个程序,你只需要输入命令 “gdb调试程序名 ” 就可以了,如 gdb main 【调试中列出源码】 当进入 gdb 调试状态后,程序会等待你输入调试的命令,此时,你可以输入 list 命令(也可以使用简写 l),列出程序的源码,来决定对哪一个逻辑进行调试 (gdb) delete 2 (gdb) info break Num Type Disp Enb Address What 1 breakpoint

    53320编辑于 2023-10-20
  • 来自专栏源懒由码

    linux gdb调试

    以前在IDE调试的话,就很容易设置断点,查看参数值,到了 linux 下就变得比较麻烦了。 目前觉得比较重要的就是: 1.设置断点: gdb命令 break,也可以用 b 。 比如, b cyc::TcpClient::onMessage 2.查看参数 gdb命令 print,也可以 p。方法 p para.显示一次。 3.一直显示 gdb命令 display,方法 display para。 取消的话 undisplay 编号 4.列出信息 gdb命令 info,info break, info display 5.调试 单步调试 n,进入函数的单步调试 s,跳到下一个断点 c 6.读取文件 gdb命令 file , file path. 7.执行 gdb 命令 run, run args. 8.显示代码 gdb 命令 list,list [行号] 之后可以按 Enter 继续显示

    5.7K32发布于 2020-10-10
  • 来自专栏编程珠玑

    GDB调试指南-单步调试

    前言 前面通过《启动调试》,《断点设置》,《变量查看》,我们已经了解了GDB基本的启动,设置断点,查看变量等,如果这些内容你还不知道,建议先回顾一下前面的内容。 在启动调试设置断点观察之后,没有我们想要的信息怎么办呢?这个时候,就需要单步执行或者跳过当前断点继续执行等等。而本文所说的单步调试并非仅仅指单步执行,而是指在你的控制之下,按要求执行语句。 num次,就达到继续执行n行的效果了: $ gdb gdbStep #启动调试 (gdb)b 25 #将断点设置在12行 (gdb)run #运行程序 Breakpoint $ gdb gdbStep #启动调试 (gdb) b 25 #在12行设置断点 Breakpoint 1 at 0x4005d3: file gdbStep.c, line 25. 当然它还有一个选项,用来设置当遇到没有调试信息的函数,s命令是否跳过该函数,而执行后面的。

    3.3K20发布于 2019-07-12
  • 来自专栏数据结构与算法以及编程心得

    01.gdb调试

    环境准备 linux操作系统:物理机,云服务器,虚拟机 c++开发调试环境准备 安装gcc,g++,gdb 在ubuntu平台: apt install gcc g++ make gdb 在centos 平台: yum install gcc gcc-c++ make gdb linux下的调试工具gdb https://www.sourceware.org/gdb/ 代码 https://github.com /CoderDuanGe/gdbdebug/tree/master/section1 makefile参数: CFLAGS: -gundefined[在这里插入图片描述]有了-g参数调试比较方便,如果没有 -g参数,就没有调试信息,调试比较的困难gdb的使用1.对文件进行gdb调试: gdb +文件名 **makefile带-g参数的** !

    44230编辑于 2022-05-25
  • 来自专栏用户2442861的专栏

    GDB调试Segmentation Fault

    Time to fire up gdb: prompt > gdb a.out GNU gdb 5.0 Copyright 2000 Free Software Foundation, Inc. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) We'll just run it and see what happens: (gdb) run Starting program: /home/dgawd/cpsc/363 prompt > So now you know how to debug segmentation faults with gdb.

    1.9K30发布于 2018-09-19
  • Linux之GDB调试

    @TOC Linux GDB 调试 一、初识 GDB GDB 是一个开源的、功能强大的调试工具,主要用于调试 C、C++ 等语言编写的程序。 加载程序与核心转储文件 当程序崩溃并生成了核心转储文件时,可以通过以下命令启动 GDB,加载程序和核心转储文件进行调试gdb <program> <core> 这可以帮助你分析程序崩溃的原因。 打印变量值 在调试过程中,可以通过以下命令打印变量的值: print <variable> 例如,打印变量 x 的值: print x GDB 会显示变量的当前值。 2. 七、退出 GDB 完成调试后,可以通过以下命令退出 GDB: quit 或者: exit 八、GBD基本命令汇总 启动 GDB gdb :启动 GDB 并加载要调试的程序。 gdb :加载程序和核心转储文件进行调试gdb --args :加载程序并传递参数。 设置断点 break :在指定函数处设置断点。

    17710编辑于 2026-01-15
  • 来自专栏Eureka的技术时光轴

    GDB调试汇编分析

    GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学。代码借用的是卢肖明同学的代码进行调试运行。 GCC编译 使用gcc -g gdbtest.c -o gdbtest -m32命令在64位的机器上产生32位汇编代码 在使用gdb进行调试运行时,有cgdb和gdb两种工具,我建议大家使用张梓靖同学使用的 可见此时主函数的栈基址为0xffffd068,用x(examine)指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0 用i r指令查看各寄存器的值 依次如下指令调试汇编代码 总结反思 这次学习让我对于gdb有了更加深刻地认识,设置断点是我们在进行编写代码时在整体编译没有问题,但是却无法得到我们想要的结果时所进行分段纠错步骤,这次的实践让我对于堆栈变化了有了更加深刻的理解,在使用终端三件工具编程时 gdb调试分析汇总表 ? ?

    3.6K21发布于 2019-07-24
  • 来自专栏后台技术杂项笔记

    gdb调试基础命令

    gdb调试 复习并整理gdb 1. 调试准备 被调试的程序需要生成调试符号信息,即在gcc/g++编译时加上-g选项。 启动gdb调试的方法 直接调试目标程序 gdb filename # filename为要启动的调试程序名称 attach到进程 gdb attach pid #attach到pid对应的进程 调试core 4. gdb调试多线程程序 4.1 调试多线程程序的方法 先gdb让程序跑起来,然后Ctrl+C中断程序,使用Info threads命令查看当前进程下有多少线程在运行。 5. gdb调试多进程程序 5.1 方法一 先在一个shell窗口中调试父进程,等待子进程被fork出来后,再开启另外一个shell窗口使用gdb attach命令将gdb attach到子进程上。 ) 5.2 方法二 gdb调试器提供了一个follow-fork选项,通过set follow-fork mode设置一个进程fork处新的子进程时,gdb时继续调试父进程(取值parent)还是继续调试子进程

    2.1K10编辑于 2022-09-26
  • 来自专栏洞明学问

    GDB 调试笔记

    GDB 是一个由 GNU 开源组织发布的 *.nix 下的、基于命令行的一款比较知名的程序调试工具。 GDB 有着相当多的命令,但是常用的只有大概十个左右。 gdb命令一般可以使用 gdb program 或者使用 gdb progrma core 。如果想对正在执行的进程进行调试,则可以使用 gdb -p 123 。 常见命令 命令 解释 示例 file <文件名> 加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 (gdb) file gdb-sample r run的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 (gdb) r c Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。

    1.2K30发布于 2020-05-22
  • 来自专栏有价值炮灰

    GDB调试笔记

    GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令, 现将平时记录在本子上的笔记整理记录一下. 一、断点 断点类型有breakpoints, watchpoints, catchpoints. 1).breakpoints:  普通断点,程序运行到该点时暂停(此时此行尚未运行),是gdb中最常用的断点 ,相关命令为: break [函数名,行数或者指令地址] [condi] 在指定地方加上断点 例: (gdb) set $counter = 0 (gdb) break 26 if ++$counter 空格分割 clear location   :location是函数名,行数等 enable/disable  :使能/使失效断点,不删除 其他 为断点号bnum写一个命令列表,程序运行到断点时gdb 会依次运行列表中的命令: commands [bnums]   …command list… end 二、单步调试 1)基本命令: *step:*运行下一步(即step into,进入调用的函数体内

    1.6K30编辑于 2023-02-12
  • 来自专栏二进制漏洞研究

    gdb 调试笔记

    /gdb/install make ‐j4 make install 安装后程序在/usr/local/bin 原先的程序在/usr/bin 二、自动化处理 (1)内核调试脚本 gdb \ ‐ex "add‐auto‐load‐safe‐path "set write on" gdb ‐statistics:可打印每条指令执行的时间 调试时可以通过"|"管道符对输出结果进行处理 gdb ‐‐pid=<n> 调试已经运行的程序 (2)执行系统命令 command (3)转储分析 gdb ‐‐core=<file> gdb program core gcore [file] 生成一个core文件用于保存当前gdb调试的快照(默认生成core.pid same是保持在原来的inferior,gdb默认是same模式 set schedule‐multiple on 所有进程同时运行,detach‐on‐fork开启调试一个进程时,其他进程挂起 bt 十、调试内核时出现“Remote 'g' packet reply is too long”问题 gdb源码下载:https://mirrors.ustc.edu.cn/gnu/gdb/ gdb源码根目录

    1.4K00发布于 2020-06-12
  • 来自专栏锦小年的博客

    使用gdb调试内核

    使用gdb调试内核 内核配置需要添加编译信息。 可以参考:https://blog.csdn.net/gatieme/article/details/104266966 在目标板上开启gdbserver模式(虚拟soc中加上gdb调试的选项);在host 上启动gdb客户端后连接虚拟soc提供的gdb服务(终端不会有输出),命令如下: # 启动gdb,工具链中gdb的路径,并读取符号表 # vmlinux相当于elf文件,具有符号表。 使用gdb扩展 内核通过python脚本定义了一组gdb命令,可方便其对内核的调试,如通过该脚本可以打印dmesg,percpu变量,通过pid打印其对应的task_struct结构体等。 在gdb中可以读取该文件。 # 启动gdb,工具链中gdb的路径,并读取符号表 # vmlinux相当于elf文件,具有符号表。Image文件相当于bin文件。

    2.2K50编辑于 2022-11-02
领券