linux调试程序利器 GDB学习笔记

Linux下的c/c++程序调试利器-----gdb/cgdb gdb是UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。(来自百度百科)下面通过一个简单的例子来阐述一下这个强大的调试工具吧!//a.c #include "stdio.h" int func( 阅读详情

作为程序员,调试程序是不可避免的,在windows下常用的IDE比如 keil 软件会有集成的debug图形化调试工具,使用起来非常简单易懂。在linux下虽然没有图形化调试工具,但是gdb作为文本界面的调试工具其功能也是非常强大的,在这里简单介绍gdb的用法。


一.调试准备


1.首先我们编写一个测试程序:

[lwn@VM_255_164_centos temp2]$vim gdbtest.c
/*********************************************************************************
  2  *      Copyright:  (C) 2017 SCUEC
  3  *                  All rights reserved.
  4  *
  5  *       Filename:  gdbtest.c
  6  *    Description:  This file
  7  *
  8  *        Version:  1.0.0(04/01/17)
  9  *         Author:  LI WJNG <liwjng@gmail.com>
 10  *      ChangeLog:  1, Release initial version on "04/01/17 15:19:12"
 11  *
 12  ********************************************************************************/
 13
 14 #include <stdio.h>
 15
 16 int func(int n)
 17 {
 18     int sum=0,i;
 19     for(i=0;i<n;i++)
 20     {
 21         sum += i;
 22     }
 23     return sum;
 24 }
 25
 26
 27 /********************************************************************************
 28  *  Description:
 29  *   Input Args:
 30  *  Output Args:
 31  * Return Value:
 32  ********************************************************************************/
 33 int main (int argc, char **argv)
 34 {
 35     int i;
 36     long result = 0;
 37     int sum = 0;
 38     sum  = func(10);
 39     for(i=0;i<100;i++)
 40     {
 41         result += i;
 42     }
 43
 44     printf("the result is add 1 to 100 is %d\n",result);
 45     printf("the sum is add 1 to %d is %d\n",10,sum);
 46     return 0;
 47 } /* ----- End of main() ----- */
 48

2.编译程序

要使用gdb调试,编译的时候一定要加上 -g 选项,如:gcc -g test.c,否则在gdb命令中l的时候会出现:No symbol table is loaded.  Use the "file" command.错误提示;

[lwn@VM_255_164_centos temp2]$ gcc -g gdbtest.c -o test
[lwn@VM_255_164_centos temp2]$ ls
gdbtest.c  test


3.使用gdb命令进入调试界面

如果直接使用gdb test 会打印gdb的版本信息等,为了显示简洁一点,使用gdb -q可以不显示版本信息
[lwn@VM_255_164_centos temp2]$ gdb -q test
Reading symbols from /home/lwn/mysrc/temp2/test...done.
(gdb)

二.gdb调试命令:


在gdb调试界面下可以直接使用gdb的调试命令,enter继续执行上条命令。



下面逐条分析:

1.使用list(简写:l) 命令,将看到部分源程序清单。

list:                显示源程序1-10行
list +行号:      显示行号前后若干行
list +函数名:          显示函数前后若干行
这里就不一一列举了,所有有关list的相关操作可以使用 help list 命令进行查看
如:
(gdb) l main
29       *   Input Args:
30       *  Output Args:
31       * Return Value:
32       ********************************************************************************/
33      int main (int argc, char **argv)
34      {
35          int i;
36          long result = 0;
37          int sum = 0;
38          sum  = func(10);
(gdb) help list //可以看到有关list的命令说明
List specified function or line.
With no argument, lists ten more lines after or around previous listing.
"list -" lists the ten lines before a previous ten-line listing.
One argument specifies a line, and ten lines are listed around that line.
Two arguments with comma between specify starting and ending lines to list.
Lines can be specified in these ways:
  LINENUM, to list around that line in current file,
  FILE:LINENUM, to list around that line in that file,
  FUNCTION, to list around beginning of that function,
  FILE:FUNCTION, to distinguish among like-named static functions.
  *ADDRESS, to list around the line containing that address.
With two args if one is empty it stands for ten lines away from the other arg.


2.运行程序:run(简写:r),break(简写:b) ,continue(简写:c) ,until(简写:u)

  run命令可以让程序全速运行,直到遇到断点处才停下来。如果没有设置断点,那么程序将一直运行到程序结束。
  break命令用来设置断点,
  break +行号:将断点设置在固定某行
  break +函数名:将断点设置在函数开始处
  info break:列出所有的断点
 clear +行号:取消某行设置的断点
  contin命令让程序继续运行到下一处断点,如果后面没有断点将一直运行到程序末尾。 
  until+行号:让程序执行到固定某行,其作用等同于 break+ 行号,再continu;使用until命令的前提是程序已经在运行状态
例如:
(gdb) l main
29       *   Input Args:
30       *  Output Args:
31       * Return Value:
32       ********************************************************************************/
33      int main (int argc, char **argv)
34      {
35          int i;
36          long result = 0;
37          int sum = 0;
38          sum  = func(10);
(gdb) b main //在main函数开始出设置断点
Breakpoint 1 at 0x40056d: file gdbtest.c, line 36.
(gdb) b 38  //在第38行设置断点
Breakpoint 2 at 0x40057c: file gdbtest.c, line 38.

(gdb) i b //命令info break列出所有的断点
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040056d in main at gdbtest.c:36
        breakpoint already hit 1 time
2       breakpoint     keep y   0x000000000040057c in main at gdbtest.c:38
        breakpoint already hit 1 time

(gdb) r  //r命令让程序全速运行
Starting program: /home/lwn/mysrc/temp2/test

Breakpoint 1, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:36 //遇到刚刚设置的第一个断点36行停了下来
36          long result = 0;
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64
(gdb) c //命令contin让程序继续运行
Continuing.

Breakpoint 2, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:38 //运行到设置的第二个断点听了下来
38          sum  = func(10);

(gdb) u 38//让程序执行到固定某一行
main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:38
38          sum  = func(10);



3.单步运行next(简写:n) 和step(简写:s) 

如果希望程序逐条语句地执行程序,不停地b、c太过于麻烦,gdb提供了更加step 和next命令,其作用是运行当前行。区别在于如果当前行设计函数调用,next命令会把函数当做一条语句整体执行完毕,而step命令会进入到函数内部继续单步运行,下面来看例子:
l (gdb) l //列出相关行的源程序
31       * Return Value:
32       ********************************************************************************/
33      int main (int argc, char **argv)
34      {
35          int i;
36          long result = 0;
37          int sum = 0;
38          sum  = func(10);
39          for(i=0;i<100;i++)
40          {
(gdb) b 38 //在调用函数的行设置断点
Breakpoint 3 at 0x40057c: file gdbtest.c, line 38.
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/lwn/mysrc/temp2/test

Breakpoint 3, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:38
38          sum  = func(10);
(gdb) n //可以看到使用next命令之后程序跳到了39行执行
39          for(i=0;i<100;i++)

————————————————————————————————————————————————————————————————————————————————————————————————————
Breakpoint 3, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:38
38          sum  = func(10);
(gdb) s //同样使用step命令之后可以看到程序进入到了func函数去执行
func (n=10) at gdbtest.c:18
18          int sum=0,i;

4.打印相关信息info(简写:i),print(简写:p),display(简写:disp)

程序运行到某个位置的时候,我们使用info和print命令可以打印出一些变量的值
info local:打印局部变量的值
p + 变量名:打印该变量的值
display +变量名:每次程序停下来都自动打印该变量的值
来看例子:
(gdb) r
Starting program: /home/lwn/mysrc/temp2/test

Breakpoint 1, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:36
36          long result = 0;
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64
(gdb) p result //打印result变量的值
$1 = 140737488348608 //因为第36行语句还没执行,所以现在result还未被初始化,现在是一个垃圾值
(gdb) i lo //打印所有局部变量的值
i = 0
result = 140737488348608
sum = 0
(gdb) disp result //每次遇到程序停下来都将显示变量result的值
1: result = 140737488348608
(gdb) c
Continuing.

Breakpoint 2, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:38
38          sum  = func(10);
1: result = 0 //result被初始化为0
(gdb) c
Continuing.

Breakpoint 3, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:44
44          printf("the result is add 1 to 100 is %d\n",result);
1: result = 4950 //result为最终的计算值

5.条件控制断点

在for循环中,有时候我们想让循环变量i为某个固定值的时候停下来查看某一变量,如果一直单步运行工作量有可能会很大。gdb提供了一个命令cond命令
话不多说,来看例子:
39  for(i=0;i<100;i++)
 40         {
 41             result += i;
 42         }
在这个循环中,当i=10的时候我想看看result的值怎么办呢?很好办,往下看
首先在41行设置断点,然后使用cond 2 i==10
(gdb) b 41 //在41行设置断点
Breakpoint 1 at 0x400592: file gdbtest.c, line 41.
(gdb) cond 1 i==10 //当i等于10的时候程序停下来
(gdb) r
Starting program: /home/lwn/mysrc/temp2/test

Breakpoint 1, main (argc=1, argv=0x7fffffffe5c8) at gdbtest.c:41
41              result += i;
(gdb) p i
$1 = 10
(gdb) p result//可以看到当i=10的时候 result 的值为45
$2 = 45

在大多数情况下,灵活使用这些命令已经能够高效的调试程序了,如果对于这些gdb命令还有疑问的可以使用help命令获得详细的帮助信息。




Keil5配置GCC编译器_Keil5配置GCC编译器_ Keil5配置GCC编译器文档,Keil一般使用ARMCC编译MCU工程代码。 立即下载

相关推荐

地震数据可视化必备:5分钟读懂SEGY道头字段全解析(含坐标定位指南)

本文深入解析了SEGY文件格式中道头坐标字段的提取与可视化方法。针对地震数据处理中的常见痛点,详细介绍了sx/sy、gx/gy等关键坐标字段的二进制解析、比例因子应用、单位转换及常见问题解决方案,并提供了实用的Python代码示例,帮助开发者实现从SEGY文件到三维空间可视化的完整流程。

echo99的专栏 1010

GDB 使用详解-----转载

很优秀的文章但不知哪位大神所写,多谢这位大神! 一、初始化输入gdb进入gdb调试环境。或者直接输入gdb + progfile来加载文件。注意该文件是使用gcc(或g++)编译得到的。为了使 gdb 正常工作, 必须使你的程序在编译时包含调试信息,编译时必须使用-g参数来。或者进入gdb环境后,通过命令file + progfile来加载需要调试的可...

weixin_34194551的博客 677

【EtherCAT实践篇一】TwinCAT 3安装、使用

FULL(XAE)安装包:包含了XAR的功能,并能进行多种语言的编程和硬件组态,通常安装在编程电脑上;XAR安装包:包含了ADS的功能,是实时运行环境,对 TwinCAT 模块进行加载、执行、管理、实时运行与调用,通常安装在PLC中;RM安装包:在装了高版本的TwinCAT 3后,发现PLC中的TwinCAT版本较低,就需要安装相应低版本的RM安装包切换版本使用(注:4024无法使用RM安装包切换到低于4022的版本,如4020/4018/4016版本。

JXES智能生态系统 5124

gdb调试常见命令详细总结(附示例操作)

通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。本文将主要介绍linux下的gdb调试工具常用的命令和具体的使用实例。-g 和 -ggdb 都是令 gcc 生成调试信息,但是它们也是有区别的选项解析g该选项可以利用操作系统的“原生格式(native format)”生成调试信息。

Luckiers的博客 4万+

项目实训(四)——SAM模型的学习与部署

这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。

yyyyyyyx_的博客 1421

实战指南 | 利用TSMaster的C小程序实时监控DBC报文发送周期

本文提供了一份利用TSMaster的C小程序实时监控DBC报文发送周期的实战指南。通过创建用户变量、编写C小程序核心逻辑并关联图形模块,工程师可以直观地可视化关键报文(如ID 0x64)的发送间隔,从而快速发现周期异常,提升汽车电子开发和测试中总线问题定位的效率与实时性。

weixin_29178069的博客 417

LinuxGDB调试常用命令

文章目录GDBGDB功能GDB安装GDB调试GDB调试案例GDB调试器启动GDB调试常用命令GDB辅助命令1、list(l)+ numline2、info + breakpoints/signals...GDB启动目标程序1、run(r)2、startGDB程序设置断点常规断点(break、tbreak)观察断点(watch)捕捉断点(catch)GDB单步调试程序1、next(n)count2、step(s)count3、until(u)GDB

justilake的博客 779

一个服务如何被找到、被调用、被看见:注册中心、发布注册、发现调用与服务监控的治理闭环

服务数量一多,“对方在哪儿”就成了时刻变化的变量。本文沿发布、注册、发现、调用、监控的治理闭环展开:注册中心的数据模型、健康检查与AP/CP取舍,自我保护、推空保护与本地快照三道自保机制;服务发布的启动器、动态代理、发布管理器、协议服务器与登记顺序;消费端的服务目录、请求ID配对、六种集群容错与三种发现模式;日志、指标、链路三支柱与熔断舱壁。配套五个Java演示程序实测:默认参数下宕机实例平均240秒才被摘除,优雅下线可降至45秒,统计窗口长于租约会让自我保护失效,尾部采样可捕获全部慢请求。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

GDB调试相关命令

gdb executeFilestart args...   开始单步执行run args     直接运行break(b)  加短点   b file.cpp:lineNumi registers  //显示寄存器信息i lo 显示局部变量bt   backtrace 显示调用栈frame 显示当前帧next n  下一步,不进入step s  单步进入info breakpoints (i b...

zhjzhjxzhl的专栏 258

SPAD IMX479规格_VOP

对于VOP的定义,很多人可能是不理解这一路的供电,实际上这一路供电是非常重要的,这是给器件SPAD供电,决定SPAD是否work,在大部分的paper以及大部分公司,基本都是叫VOP,名称是SPAD breakdown voltage power supply,严格意义上叫Operating Voltage,工作电压。当然有些公司也有一些其他叫法就不提了。其实大家可以明显的看出,典型值-20.5没有发生变化,市面上绝大多数VOP的典型值也都是在-20V这边。

致力于lidar应用开发 701

蓝牙调试抓包工具--nRF Connect移动端 使用详细总结

摘要: nRF Connect移动端是一款功能全面的蓝牙低功耗(BLE)调试工具,支持设备扫描、多设备连接、服务/特征值查看及数据读写操作。核心功能包括实时数据通信(读取/写入/通知)、设备固件更新(DFU)以及高级工具如自动化测试和信号分析。兼容Android 4.3+和iOS设备,适用于开发调试(如ESP32/nRF52)、设备管理和数据分析。需注意设备兼容性问题(如旧安卓设备可能需关闭连续扫描),并确保数据类型匹配。配套工具链包括nRF Toolbox和nRF Connect SDK,是BLE开发的必

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2382

【嵌入式Linux学习】调试利器之GDB快速入门指南

1. GDB调试利器 1.1. GDB简介 在单片机开发中,KEIL、IAR、ADS1.2等集成开发环境下的调试工具对程序开发有很大的帮助, 尤其是出现各种疑难杂症的bug时,往往只能通过单步调试、堆栈查询、CPU寄存器查询、 甚至是反汇编来定位问题。同样的,在嵌入式Linux的开发环境下,也有能够实现类似功能的调试器,那就是GDB(GNU debugger)。 它是一个由GNU开源组织发布的,UNIX/LINUX操作系统下的、基于命令行的、功能强大的调试工具, 是嵌入式linux开发人员必不可少的工具。

悟已往之不谏 知来者之可追 1593

手把手教你学Simulink——电机电磁兼容与可靠性场景示例:基于Simulink的电机噪声抑制控制仿真

本文带你完成了电机噪声抑制控制的Simulink仿真,实现了:✅ 揭示了电磁噪声从电流到声音的传递机理✅ 搭建了含死区、固定载波等噪声源的高保真模型随机PWM(消除啸叫)谐振控制器(抑制5/7次嗡鸣)谐波注入(降低THD) ✅ 通过综合方案将噪声降低10 dB以上(感知响度减半!) ✅ 为产品静音品质提升提供可落地的控制方案。

MHD0815的博客 94

【Linux指南】Linux调试利器gdb入门:从编译到基础命令实战

在Linux环境下开发C/C++程序时,遇到bug是家常便饭。无论是逻辑错误、内存泄漏还是运行时崩溃,一款强大的调试工具都能帮我们快速定位问题根源。gdb(GNU Debugger) 作为Linux系统中最常用的命令行调试工具,支持断点设置、变量查看、单步执行等核心功能,是开发者排查问题的"利器"。 本文将从最基础的"如何生成可调试程序"讲起,逐步介绍gdb的启动方式、核心调试命令及实战技巧,帮助新手快速掌握gdb的使用方法。

倔强的石头的博客 7099

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Linux操作系统gdb下载以及基本使用方法

gdb调试是个啥 gdb是GNU 发布的一个强大的程序调试工具,也是Linux 程序员不可或缺的一大利器。 下面就来正式介绍gdb的下载和使用方法了👇 ~ ~ gdb启动 使用gdb的前提: gcc -g hello.c -o hello //生成.o文件的编译过程都得加个‘-g’ 下面是我写的一个Makefile例子(如果不了解Makefile是怎么回事的同学可以看看Makefile的用法链接) 启动gdb: gdb hello //hello是我们编译链接完成后的可执行文件 然后she

Jacksqh的博客 9275

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux调试利器:gdb与cgdb全攻略,从入门到高效调试

本文介绍了Linux环境下GDB和CGDB调试工具的使用方法。主要内容包括:1)调试器的作用与必要性;2)debug/release模式的区别及-g选项的使用;3)GDB和CGDB的安装配置;4)核心调试命令速查表(断点管理、变量操作等);5)CGDB图形化界面的优势;6)调试实战技巧(条件断点、变量监视、函数跳转等)。通过示例代码演示了如何利用这些工具高效定位程序问题,特别强调了断点管理、变量跟踪等关键调试技术。文章为Linux开发者提供了完整的调试工具使用指南。

心向往之,行必能至 1091

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux下gdb调试用法

稍微小小介绍一下 gdb是GUN组织开发的Linux下的调试利器。一般用于调试C/C++程序。 GDB主要有以下4个功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。下 直接进入主题 这是本次用来测试的代码 #includ...

weixin_62017112的博客 9553

【Linux】GDB调试

GDB是GUN发布的一个强大的程序调试工具,也是Linux程序员不可或缺的一大利器。

半生瓜のblog 923

linux下使用gdb运行程序,查看程序崩溃原因

gdb 是 GNU Debugger 的缩写,是一个功能强大的用于调试程序的开源调试器工具。它可以帮助开发人员诊断和解决程序中的错误、跟踪程序执行过程、查看变量的值等。gdb 支持多种编程语言,包括 C、C++、Objective-C、Fortran 等,并可用于多种操作系统,如 Linux、Unix、Windows 等。通过 gbd,开发人员可以进行如下操作:设置断点:可以在程序中设置断点,以便在执行到特定代码行时暂停程序的执行,方便查看程序状态。单步执行:可以逐行执行程序,并查看每一步的执行情况,帮助定

qq_44667165的博客 3506

Linux程序调试利器-gdb

一. gdb简介 编写一个优秀的代码离不开程序的调试,在 Windows 下有很多的集成开发环境内置了调试工具,使用鼠标就可以轻松地为程序打上断点,只要键盘按一下 F5 就可以调试执行,但是如果是在 Linux 命令行下调试程序就没有这么方便了。gdb 是 GNU 发布的一款功能强大的程序调试工具,可以帮助程序员调试程序。 二. gdb的使用 1. 准备工作 ...

椛茶的博客 301

linux 中调试器 gdb 的使用

1.基本命令 1)进入GDB  #gdb test   test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2)查看源码  (gdb) l   源码会进行行号提示。   如果需要查看在其他文件中定义的函数,在

freeking101的博客 6311

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

关注公众号【高性能架构探索】,回复【pdf】,免费获取计算机经典资料 在上篇文章中,我们分析了线上coredump产生的原因,其中用到了coredump分析工具gdb,这几天一直有读者在问,能不能写一篇关于gdb调试方面的文章,今天借助此文,分享一些工作中的调试经验,希望能够帮到大家。 写在前面 在我的工作经历中,前几年在Windows上进行开发,使用Visual Studio进行调试,简直是利器,各种断点等用鼠标点点点就能设置;大概从12年开始转Linux开发了,所以调试都是基于GDB的。本来这篇文章.

高性能架构探索 2万+

linux应用开发调试利器gdb的使用

一、介绍 gdb工具是一个很好的嵌入式Linux下的程序调试工具。 程序一般不是一次成功,程序过大,会使用调试工具定位bug 功能: 1、自己设置断点,让程序停留在指定的位置 2、单步调试,单步跳函数调试 3、可以查看变量的值,寄存器的值等等 4、设置变量的值等等 二、使用方法 1、编译的时候加上调试选项 gcc -g 源文件.c -o 输出的目标文件 2、运行程序 3、gdb命令调试程序 三、示例 main.c int main() { int i,j,k; printf("\n"); for(i=

锅锅的博客 414

linux 进程 调试程序,[Pthread] Linux程序调试——Inside GDB

引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它是如何跟踪到进程执行的?3.gdb是我们调试程序的利器,可以设置断点,单步跟踪程序。它的实现原理又是什么?所有这一切的背后都隐藏着L...

weixin_39943383的博客 149

Linux 编程与调试工具 gdb:GNU 调试器

在 Linux 系统的开发过程中,调试是确保程序正确性和优化性能的重要步骤。`gdb`(GNU Debugger)是 Linux 中强大而广泛使用的调试工具,能够帮助开发者定位程序中的 bug、检查程序状态、执行单步调试等。无论是初学者还是经验丰富的开发人员,掌握 `gdb` 都能显著提高代码的质量和开发效率。本文将介绍 `gdb` 的基本功能和使用技巧,帮助更高效地进行调试。

2127
上一篇: led驱动实例
下一篇: plat_led驱动总结
Escropion
博客等级 码龄11年 145粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值