GDB调试基本使用方法

gdb调试多进程 gdb 多进程 多线程调试方法 gdb调试 关于gdb调试多进程很早之前就看过,但一直没有总结很深入的学习,今天又碰到这个问题了,记录下 记得kk跟我说过,在开发程序的时候尽量少调试,尽量少使用gdb等调试工具,尽量多的使用log等方式来定位错误,这样会大大减少调试所需的时间和精力,同时也能快速的定位问题。当然,利用gdb调试还是有很多的优势的,比如对于我这个菜鸟来说,可以好好学习下强大的gdb~ 关于gdb的基本调试,基本已经掌握了,经常会使用的一些命令有: s----step n----next c-----continue p--- 阅读详情

文章转载自coolshell.cn,对相关内容根据自己理解有改动,原文请访问作者博客.
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
一个调试示例
——————
源程序:tst.c

 #include <stdio.h>
 int func(int n)
 {
         int sum=0,i;
        for(i=0; i<n; i++)
        {
                 sum+=i;
        }
         return sum;
 }
 int main()
 {
        int i;
        long result = 0;
        for(i=1; i<=100; i++)
         {
                result += i;
        }

        printf("result[1-100] = %d /n", result );
        printf("result[1-250] = %d /n", func(250) );
 }

编译生成执行文件:(Linux下)
[root@centos-linux ~]#gcc -g tst.c -o tst

使用GDB调试:

[root@centos-linux ~]#gdb tst <---------- 启动GDB
GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux"...
(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。
1 #include
2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i<n; i++)
7 {
8 sum+=i;
9 }
10 return sum;
(gdb) <-------------------- 直接回车表示,重复上一次命令
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;

(gdb) break 16 <-------------------- 设置断点,在源程序第16行处。
Breakpoint 1 at 0x8048496: file tst.c, line 16.
(gdb) break func <-------------------- 设置断点,在函数func()入口处。
Breakpoint 2 at 0x8048456: file tst.c, line 5.
(gdb) info break <-------------------- 查看断点信息。
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048496 in main at tst.c:16
2 breakpoint keep y 0x08048456 in func at tst.c:5
(gdb) r <--------------------- 运行程序,run命令简写
Starting program: /home/hchen/test/tst

Breakpoint 1, main () at tst.c:17 <---------- 在断点处停住。
17 long result = 0;
(gdb) n <--------------------- 单条语句执行,next命令简写。
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) n
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) c <--------------------- 继续运行程序,continue命令简写。
Continuing.
result[1-100] = 5050 <----------程序输出。

Breakpoint 2, func (n=250) at tst.c:5
5 int sum=0,i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p i <--------------------- 打印变量i的值,print命令简写。
$1 = 134513808
(gdb) n
8 sum+=i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$2 = 1
(gdb) n
8 sum+=i;
(gdb) p i
$3 = 2
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$4 = 3
(gdb) bt <--------------------- 查看函数堆栈。

0 func (n=250) at tst.c:5
1 0x080484e4 in main () at tst.c:24
2 0x400409ed in __libc_start_main () from /lib/libc.so.6
(gdb) finish <--------------------- 退出函数。
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d /n", func(250) );
Value returned is $6 = 31375
(gdb) c <--------------------- 继续运行。
Continuing.
result[1-250] = 31375 <----------程序输出。

Program exited with code 027. <--------程序退出,调试结束。
(gdb) q <--------------------- 退出gdb。
hchen/test>

好了,有了以上的感性认识,还是让我们来系统地认识一下gdb吧。
使用GDB
————

一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:

> gcc -g hello.c -o hello

如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。

启动GDB的方法有以下几种:

1、gdb <program> 
   program也就是你的执行文件,一般在当然目录下。

2、gdb <program> core
   用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb <program> <PID>
   如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。我在下面只例举一些比较常用的参数:
-symbols
-s
从指定文件中读取符号表。

-se file
从指定文件中读取符号表信息,并把他用在可执行文件中。

-core
-c
调试时core dump的core文件。

-directory
-d
加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

5、gcc调试工具GDB使用的方法 gcc调试工具GDB使用的方法;使用 GDB 调试多进程程序实验操作文档 阅读详情

相关推荐

GDB调试器及调试方法

GDB调试器及调试方法一、GDB简介二、gdb的使用1、启动gdb2、gdb命令3、gdb调试举例4、内存出错的gdb调试 一、GDB简介 • GDB : GNU Debugger,是GNU工程为GNU操作系统开发的 调试器,但它的使用不局限于GNU操作系统, GDB可以运行 在UNIX、Linux甚至Microsoft Windows。 • GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编 写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可 运行于不同电脑。 • 使用G

weixin_51118019的博客 1364

Linux GDB(一)

[size=large][align=center]Linux GDB(一)[/align][/size] 文章来源:http://blog.csdn.net/haoel/article/details/2879 DB概述 ———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在U...

android菜鸟的专栏 265

【linux系统调试】GDB 工具使用与调试方法大全,看这篇就够了

‌ GDB 工具是最常见的调试工具,也是平常工作中使用频率最高最广为人知的嵌入式Linux产品软件调试工具。要想使用该工具进行代码调试,首先需要在编译程序时需添加-g选项保留调试信息。这是前提,否则无法进行后续操作。话不多说,直接进入正题。

以实战经验介绍行业知识 1803

gdb 调试命令整理

GDB 调试 要进行调试程序首先要生成一个含有调试信息的执行程序命令如下: gcc(g++) -g -o 文件名 源文件.c(源文件.cpp)gcc(g++) -ggdb3 -o 文件名 源文件.c(源文件.cpp) 此时便会生成一个含有调试信息的可执行文件,然后便可以用 gdb 去调试这个程序了,进入调试程序命令,但是如果用 gdb 去调试一个未包含调试信息的可执行文件则会发生错误

静故了群动 960

使用python对创芯科技CANalyst-II分析仪进行二次开发(详细教程)

使用python对创芯科技CANalyst-II分析仪进行二次开发

ningqingzy的博客 1万+

Cartographer参数调优指南:如何用Lua配置解决建图漂移问题

本文深入解析Cartographer SLAM系统的Lua参数调优方法,针对建图漂移问题提供完整解决方案。从运动滤波、扫描匹配到多传感器融合,详细讲解关键参数配置技巧,并给出仓库物流和服务机器人等典型场景的优化方案,帮助开发者实现精准建图。

vulkan6gpu的博客 114

在VSCode上使用gdb,gdbServer远程调试树莓派程序

使用gdb和gdbserver在VSCode上远程调试

HappyEventKing的博客 1745

你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号

功能强大 管理便捷—给您全新的路由体验 一键更换指定线路or批量更换所有IP/MAC/SSID 自定义走本地网络策略的分流功能 设备批发价、不限制拨号账号服务商 强大的单设备/多设备IP去重功能 批量导入、管理一号通线路 一键任意切换5G_WiFi(推荐)/2.4G_WiFi(建议不用) 设备支持PPTP/L2TP/SSTP/openVP.N等协议 独家支持openVPN,适用于网络受限用户 支持自行接入AP和交换机扩容 一键打开/关闭所有虚拟WiFi 一键隐藏/显示设备WiFi...

米粒儿 4249

用GDB调试程序

陈皓专栏 【空谷幽兰,心如皓月】  看到的系列文章,贴个链接过来收藏。(版权归原作者陈皓所有) 用GDB调试程序(一)    GDB概述    一个调试示例    使用GDB用GDB调试程序(二)    GDB的命令概貌    GDB中运行UNIX的shell程序    在GDB中运行程序    调试已运行的程序    暂停 / 恢复程序运行       一、设置断点(BreakPoint)

HateCode的胡言乱语 1588

山东大学FPGA课程实验一 加法器设计

电子设计自动化与FPGA设计,实验一 加法器设计

2503_91283667的博客 869

调试GMS应用,报错“此设备未获得play保护机制认证”问题解决

不少同学在调试GMS相关应用时,需登录Google账号,有时会弹出如下通知。Google登录界面也会出现如下提示这个报错的原因是设备未通过Google认证,google服务器未配置荣耀设备的型号白名单导致国内网页有一些指导方法在鸿蒙\荣耀的设备上消除这个提示,但本质的问题没有解决,无法登录Google账号。

胡同老道的博客 2万+

陈浩计算机应用,陈浩

陈浩于2004获得加州大学伯克利分校计算机专业博士学位后,任职于加州大学戴维斯分校计算机系,获得终身职位。2014年4月开始在上海科技大学信息科学与技术学院工作,研究方向为计算机安全和移动计算。在美国著名大学十年的教授经验让陈浩对中美两国大学的差异有着深刻的感悟。而他之所以回国选择上科大,是因为他觉得上科大是国内少有的在制度和理念上可以和美国的优秀大学相媲美的学校。上科大从学生的挑选到教授的挑选都...

weixin_35414484的博客 521

POCV/SOCV 、LVF的差别

1.POCV与OCV、AOCV 为了模拟片上PVT的差异带来的影响,最早提出了OCV(On Chip Variation)给每个cell都设置一个固定的derate值,来覆盖最悲观的情况,但是随着工艺发展,设计规模增大,OCV过度的悲观开始限制性能,于是又有了AOCV(Advanced On Chip Variation),用基于depth和distance的derate来取代单一的全局的derate值,但时序收敛的过程中逻辑级数depth的变化让时序分析的时间变得非常长,由此POCV诞生了。 POCV

m0_61544122的博客 5359

GDB调试方法

主要用于调试程序,帮助找出程序BUG.

weixin_44575952的博客 2万+

k8s问题处理

执行 kubectl api-resources 报错如下。

weixin_40548182的博客 944

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5264

Linux gdb调试(1):gdb基本使用方法

1、基本使用方法   Windows上的IDE图形化软件使得程序的调试比较方便,而Linux常用的是gdb命令,它同样可以实现打断点、查看程序运行时某个变量值等等操作,在Ubuntu上默认自带gdb,可以直接调试运行在系统上的应用程序。(注意,需要用到gdb调试的话在编译时需要加上-g选项。) 常用选项如下: 选项 功能 list / l 查看源代码,可跟行号、函数名 break / b 设置断点,可根据行号或函数名,还可以设置条件断点,如:b 10 if i==2 info / i

weixin_44498318的博客 600

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

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

GDB调试方法总结

Linux的调试器 概念 安装GDB增强工具 (gef) 简单的安装方法(我的Linux是Ubuntu18.04) 尝试使用gdb进行小程序的调试 GDB的命令 GDB与VC++调试命令的对比 GDB的简单使用 1.启动GDB 2.给hello下断点(也就是程序运行到哪,我们以man函数为例) 3.让程序运行起来 4.此时需要往下运行 5.查看运行中程序的变量 6.运行时程序的打印会在最上面显示 7.退出gdb 8.补充一点 9.gdb的基本命令 GDB多进程调试 1.编译 2.启动gdb 3.下断点(我们

zhuguanlin121的博客 3722

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

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

GDB调试方法分析

GDB (GNU Debugger) 是GNU软件系统中的强大调试工具,它可以让我们在程序运行时观察程序的内部状态,主要用于调试用C、C++等编译型语言编写的程序。启动程序,并指定可能影响其行为的任何内容使程序在指定条件下停止程序停止时检查发生了什么修改程序中的内容,以便纠正错误的影响# 定义自定义命令> print i> print j> end# 使用自定义命令。

huayidw的博客 1088

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

gdb调试方法

(转载)gdb中汇编调试我觉得写的挺好! 原名 gdb相关(gdb十分钟教程) 本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。 GDB是一个由GNU开源组织发布的、UNIX/

bobocheng的专栏 1万+

使用GDB调试程序方法

写程序难免会遇到 Bug,这时我们就需要 GDB 来对程序进行调试了。调试需要在编译的时候,加上一些调试相关的信息,也就是说,需要指定 -g 选项。如:其中-g选项表示生成调试信息。当你在编译程序时加上-g选项,gcc会在生成的包含额外的调试信息。这些调试信息主要是关于源代码和目标代码之间的映射关系等内容。例如,它会记录变量的名称、类型、位置,函数的入口点等信息。这些调试信息对于使用调试工具(如gdb)来调试程序非常重要。调试工具可以利用这些信息来帮助你查看变量的值、设置断点、单步执行等操作。

basketball616的博客 1059

Linux gdb调试(2):交叉编译gdb调试工具及gdbserver的使用方法

1、交叉编译 gdb源码下载:http://ftp.gnu.org/gnu/gdb/ tar xzvf gdb-8.0.1.tar.gz cd gdb-8.0.1/ ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc make # 编译生成两个比较重要的可执行文件:gdb/gdb 和 gdb/gdbserver/gdbserver 2、gdb使用方法 Linux调试:gdb基本使用方法 3、gdbserver使用方法

weixin_44498318的博客 733

Linux下gdb调试工具介绍和gdb常用调试方法介绍

1、gdb介绍 2、gdb用法介绍  (1)生成带有调试信息的可运行程序 a>判断可运行程序是否带有调试信息? b>判断可执行文件是否带有调试信息的两种方法: (2)运行调试程序:(gdb)run、start区别 附加知识:启动带参可执行程序 (3)源码查看:(gdb)list(4)运行参数查看show (5)断点设置 设置断点、设置条件断点、查看断点、删除断点、禁用断点、运行某个断点 (6)堆栈  a>堆栈查看命令 b>栈帧(stack frame)介绍  c>函数调用过程中栈区变化 d>栈增长方向

hanxiaoyong_的博客 8070

Linux下gdb调试方法

GDB(GNU Debugger)是Linux环境下一款强大的命令行调试工具,由GNU项目提供,用于帮助开发者诊断和修复程序中的错误。它支持多种编程语言,包括C、C++、Fortran、Pascal以及其他使用GNU编译器集合(GCC)编译的语言。GDB提供了丰富的功能,如设置断点、单步执行代码、查看和修改变量值、查看调用堆栈、分析内存、执行程序直到特定条件满足等,这些都是软件开发和调试过程中不可或缺的工具。

1436

gdb调试基本方法

gdb调试基本方法 gdb调试常用命令 命令 命令缩写 命令说明 list l 显示多行源代码 break b 设置断点 info i 描述程序的状态 display disp 跟踪查看某个变量 print p 打印内部变量值 frame f 查看栈帧 backtrace bt 查看函数调用信息 watch &nbsp; 监视变量值的变化 set v...

weixin_38954835的博客 553
上一篇: Linux内核链表总结
下一篇: C语言宏的高级用法
52coder
博客等级 码龄17年 87粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值