C 语言使用 gdb 调试

C语言 | GDB调试器如何使用? GDB简介 GDB(GNU Debugger)是一个强大的命令行调试工具。一般的,在Windows下进行开发,很少操控命令行调试,调试器大多与编译器都集成在IDE里了。当然,在Windo... 阅读详情

示例程序

#include <stdio.h> 

int main(void) {
        char s[20] = {0};
        s[0] = 's';
        s[2] = 's';
        printf("%s\n", s);
        return 0;
}  

编译

$ gcc fun_printf.c -o fun_printf

运行

$ ./fun_printf 
s

查看示例程序,期望输出 s s,但实际只输出了一个s

查看 printf 函数的说明

$ man 3 printf

man 命令

章节内容描述示例
1shellman ls, man printf
2系统调用man 2 unlink, man 2 open
3C库函数man 3 printf
4特殊设备文件man 4 null
5文件格式与配置文件(如 /etc/passwd)man 5 passwd
6游戏与屏保man 6 intro
7杂项man 7 utf8
8系统管理命令man 8 fdisk

使用gdb 调试程序

重新编译程序 支持调试

$ gcc -g fun_printf.c -o fun_printf

启动 gdb 调试

$ gdb ./fun_printf 
GNU gdb (Ubuntu 15.1-1ubuntu1~24.04.1) 15.1
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./fun_printf...
(gdb) 

查看源码,设置断点

(gdb) l
1	#include <stdio.h>
2	
3	int main(void) {
4		char s[20] = {0};
5		s[0] = 's';
6		s[2] = 's';
7		printf("%s\n", s);
8		return 0;
9	}
(gdb) b 7
Breakpoint 1 at 0x11a3: file fun_printf.c, line 7.

开始运行程序

(gdb) run
Starting program: /home/scd/book/linux-c/ch02/fun_printf 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main () at fun_printf.c:7
7		printf("%s\n", s);

进入函数

(gdb) s
0x00007ffff7c87bf8 in __GI__IO_puts (str=0x7fffffffd8f0 "s") at ./libio/ioputs.c:35
35	  size_t len = strlen (str);

发现 printf 函数变成了 puts
查看 puts 函数的源码

(gdb) l
30	
31	int
32	_IO_puts (const char *str)
33	{
34	  int result = EOF;
35	  size_t len = strlen (str);
36	  _IO_acquire_lock (stdout);
37	
38	  if ((_IO_vtable_offset (stdout) != 0
39	       || _IO_fwide (stdout, -1) == -1)
(gdb) 
40	      && _IO_sputn (stdout, str, len) == len
41	      && _IO_putc_unlocked ('\n', stdout) != EOF)
42	    result = MIN (INT_MAX, len + 1);
43	
44	  _IO_release_lock (stdout);
45	  return result;
46	}
47	
48	weak_alias (_IO_puts, puts)
49	libc_hidden_def (_IO_puts)
(gdb) 
End of the file was already reached, use "list ." to list the current location again

执行获取长度方法 strlen (str)

(gdb) n
36	  _IO_acquire_lock (stdout);
(gdb) print len
$1 = 1

获取的长度只有1
跳出当前函数

(gdb) finish
Run till exit from #0  __GI__IO_puts (str=0x7fffffffd8f0 "s") at ./libio/ioputs.c:36
s
main () at fun_printf.c:8
8		return 0;
Value returned is $2 = 2

只打印出了一个s
但是用 gdb 的 print 的打印可以看到 2个 s

(gdb) print s
$3 = "s\000s", '\000' <repeats 16 times>

查看s的内存

(gdb) x/20bc s
0x7fffffffd8f0:	115 's'	0 '\000'	115 's'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x7fffffffd8f8:	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x7fffffffd900:	0 '\000'	0 '\000'	0 '\000'	0 '\000'

x/20bc s 是 GDB 中查看内存的命令,各部分含义如下:

  1. x → examine 的缩写,用于查看内存内容。
  2. 20 → 表示要显示 20 个 单位(后面会说明单位大小)。
  3. b → 单位是 字节 (byte),每次显示 1 个字节。
  4. c → 将每个字节以 字符 (character) 格式显示。
    从变量 s 的地址开始,以字符形式显示连续 20 个字节的内容

发现第2个字符是 \0, puts 函数在输出的时候遇到\0 就结束了,所以只输出了一个s。具体的还要看看 strlen (str) 的汇编代码

gdb 相关知识

  1. 编译准备
    在使用 GDB 之前,必须确保编译时加入了 -g 选项,以便在可执行文件中嵌入调试信息(如变量名、行号等)。建议同时关闭优化(-O0 a),以避免代码重排导致调试困难。
gcc -g -O0 -o program program.c

  1. 启动 GDB
    可以通过以下几种方式启动调试会话:
  • 加载可执行文件‌:gdb ./program
  • 加载 Core Dump 文件‌(用于分析崩溃):gdb ./program core
  • 附加到运行中的进程‌:gdb -p
  • 启动时附带参数 gdb --args ./test hello

  1. 核心调试命令
  • 设置断点 (Breakpoints)
    断点让程序在指定位置暂停执行。

break main 或 b main:在 main 函数入口设置断点。
break 10 或 b 10:在第 10 行设置断点。
break file.c:20:在指定文件的第 20 行设置断点。
break 20 if x > 10:设置条件断点,仅当 x > 10 时暂停。
info breakpoints 或 i b:查看当前所有断点信息。
delete 1:删除编号为 1 的断点。

  • 运行与控制执行
    run 或 r:启动程序,直到遇到第一个断点或程序结束。
    continue 或 c:从当前暂停处继续执行,直到下一个断点。
    next 或 n:单步执行下一行代码,‌不进入‌函数内部(Step Over)。
    step 或 s:单步执行下一行代码,‌进入‌函数内部(Step Into)。
    finish:执行完当前函数并返回到调用者处暂停。
    until 或 u:快速执行直到退出当前循环或到达指定行。

  • 查看数据与状态
    print variable 或 p variable:打印变量的值。
    p/x var:以十六进制显示。
    p *ptr:查看指针指向的内容。
    p arr@5:查看数组前 5 个元素。
    display variable:每次程序暂停时自动打印该变量的值。
    undisplay 1:取消编号为 1 的自动显示。
    backtrace 或 bt:查看函数调用栈,帮助定位崩溃来源。
    frame n 或 f n:切换到第 n 层栈帧,以便查看该层级函数的局部变量。
    info locals:查看当前栈帧的所有局部变量。
    info args:查看当前函数的参数。
    whatis var:查看变量的类型。

  • 监控变量变化 (Watchpoints)
    watch variable:当变量的值被修改时,程序自动暂停。
    rwatch variable:当变量被读取时暂停。
    awatch variable:当变量被读取或写入时暂停。

  • 其他实用命令
    list 或 l:显示源代码。l 10,20 显示第 10 到 20 行。
    set variable x = 10:在运行时修改变量 x 的值,用于测试不同逻辑分支。
    quit 或 q:退出 GDB。


gdb 相关函数详解

print 函数

print(可简写为 p)是 GDB 中最常用的查看数据命令,用于在程序暂停时输出变量、表达式或寄存器的值。

基本用法

(gdb) print len
$1 = 1
(gdb) p s
$2 = "s\000s", '\000' <repeats 16 times>

每次执行 print 都会产生一个历史变量($1、$2……),后续可以用 $1、$2 再次引用这些结果:

(gdb) p $1 + $2

打印数组

直接打印数组时会显示整个数组;也可以只查看前 N 个元素:

(gdb) p s
(gdb) p s@5

p s@5 表示从 s 开始打印 5 个元素,适合处理指针或数组片段。

格式化输出

在变量名后加 /格式 可以指定输出格式,常见的格式有:

格式含义示例
x十六进制p/x num
d有符号十进制p/d num
u无符号十进制p/u num
o八进制p/o num
c字符p/c ch
f浮点数p/f pi
s字符串p/s str
(gdb) p/x 255
$1 = 0xff
(gdb) p/c 65
$2 = 65 'A'
(gdb) p/s s
$3 = "s"

打印指针与内存

print 可以直接解引用指针、查看指针指向的内容:

(gdb) p *ptr
(gdb) p ptr
(gdb) p &var

打印表达式与函数调用

print 不仅能打印变量,还可以计算表达式,甚至在调试环境中调用当前程序可见的函数:

(gdb) p x + y * 2
(gdb) p strlen(s)

不过要注意,调用函数是在被调试进程内执行的,可能产生副作用;对于优化过的代码或没有调试符号的库,结果可能不完整。

打印结构体与对象

结构体、联合体、类对象也可以直接打印,GDB 会递归展开显示成员:

(gdb) p st
$1 = {name = "hello", age = 18, score = 95.5}

查看变量类型

配合 whatis 或 ptype 可以查看变量类型:

(gdb) whatis s
type = char [20]
(gdb) ptype s
type = char [20]

修改变量的值

print 本身只读;如需运行时修改,通常使用 set variable 或 set var:

(gdb) set variable x = 10
(gdb) set var s[1] = 's'

修改后继续执行,即可测试不同的逻辑分支。

小结

print 的核心作用是:在程序暂停时读取并输出数据。结合 /格式、数组切片、指针解引用和表达式计算,可以快速判断当前状态是否符合预期。本文前面的调试正是通过 print len、print s 发现 len 为 1、第 2 个字符是 \0,从而定位到输出异常的根因。

ubuntu 下载 C 库函数源码包

  1. /etc/apt/sources.list.d/ubuntu.sources 增加源码包
# 二进制包源(原有)
Types: deb
URIs: https://mirrors.ustc.edu.cn/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 源码包源(新增)
Types: deb-src
URIs: https://mirrors.ustc.edu.cn/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 二进制安全更新源(原有)
Types: deb
URIs: https://mirrors.ustc.edu.cn/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 源码安全更新源(新增)
Types: deb-src
URIs: https://mirrors.ustc.edu.cn/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
  1. 新建文件夹,下载C 库函数源码包
$ mkdir -p ${HOME}/.c
$ cd ${HOME}/.c
$ sudo apt update
$ sudo apt-get source libc6
  1. 检查已下载的 C 库函数源码包
$ ls -lt
total 18568
drwxr-xr-x 65 root root     4096 May  9 21:51 glibc-2.39
-rw-r--r--  1 root root   469880 Feb  3 12:42 glibc_2.39-0ubuntu8.7.debian.tar.xz
-rw-r--r--  1 root root     9257 Feb  3 12:42 glibc_2.39-0ubuntu8.7.dsc
-rw-r--r--  1 root root 18520988 Feb  3  2024 glibc_2.39.orig.tar.xz
-rw-r--r--  1 root root      833 Feb  3  2024 glibc_2.39.orig.tar.xz.asc

gdb 初始化配置

配置库函数源码

$ echo "directory /home/scd/.c/glibc-2.39" >> ~/.gdbinit
PaddleOCR GPU部署:从环境配置到避坑实战指南 本文详细介绍了PaddleOCR GPU部署的全过程,从环境配置到避坑实战指南。通过分析常见的部署失败原因,提供硬件兼容性自查、软件环境精配方案以及路径配置的解决方案,帮助用户高效完成GPU加速的OCR任务部署,避免90%的常见错误。 阅读详情

相关推荐

从交换机安全配置,看常见局域网攻击

前言 构建零信任网络,自然离不开网络准入(NAC),这就涉及到交换机的一些安全测试,于是有了此文《从交换机安全配置看常见局域网攻击》。 交换机安全配置 如本文标题所说从交换机安全配置看常见的局域网攻击,那么下面提到的各种攻击方式,自然是建立在交换机安全配置之上来说的。我们通过h3c官方提供的《H3C 交换机安全加固手册》和《安全配置指导》,从这两份手册可以看出交换机支持的安全配置非常多,基本已经覆盖了各种我们熟知局域网攻击。下面就挑几个典型的攻击方式进行演示。 arp欺骗 【一>所有资源获取&lt

kali_Ma的博客 1万+

使用GCC与GDB对c语言程序进行调试

在使用 GCC 编译源代码时添加-g选项,这会让编译器在生成的可执行文件中包含丰富的调试信息,例如源代码行号、变量名、函数名等,帮助 GDB 建立源代码和机器代码之间的映射关系。

mshylf的博客 1310

状态机设计与实现( stm32小车避障为例)

本文以STM32小车避障为例,介绍了状态机设计与实现方法。首先阐述了状态机的事件驱动特性、清晰结构和易扩展优势,并给出硬件组成框架。核心实现部分展示了状态枚举定义、状态转移图和主循环框架,通过switch-case结构实现状态切换。关键状态示例包括前方扫描和转向决策逻辑,通过传感器数据驱动状态转移。总结指出状态机设计需定义枚举状态、实现状态函数、使用switch跳转并更新全局状态。文章最后声明内容为学习笔记,欢迎读者指正交流。全文结构清晰,代码示例具体,为嵌入式系统状态机设计提供了实用参考。

2302_80219536的博客 1046

Linux系统下调试 C语言程序(使用gdb)

问题描述:Linux 系统下用C语言写 的脚本程序,程序运行时出现未知错误需要调试找出问题所在地。(阿里云Ubuntu系统的服务器)。 解决方法:使用 gdb工具在终端窗口中调试 C文件。 具体方法: (1)安装 gdb  sudo apt-get install gdb (一般的服务器是没有安装gdb的,所以需要安装gdb。如果安装过程中出现源错误,直接使用 sudo apt-get...

少安的砖厂 1468

RP Fiber Power 版本

RP Fiber Power的版本历史 该软件一直受到多年来广泛的发展计划,这大大扩展了其功能,以及用户界面的质量。 V1 这是第1个版本。 它仅限于光纤激光器和放大器的连续波计算,并且只能通过脚本进行控制。 V2 版本2引入了交互式表单。 至少对于更简单的模拟,现在可以简单地通过填写表单来工作,而V1必须通过脚本来控制。 例如,屏幕截图显示了输入某些信号参数的表单: 当您基于这些表单执行计算时,程序将根据您的表单输入自动编写脚本文件,然后执行该脚本。如果您需要编写脚本以获得更大的灵活性,可以稍后查看该脚

Asdmath的博客 2431

磁栅尺的基本原理

一、磁栅尺简介 磁栅尺(Magnetic scale)是一种常见于工业自动化设备领域的线性位移测量方案,因为其耐用性强,对环境要求不高,逐渐替代了对环境要求苛刻的光学直线测量方案。 作为自动化设备领域里不多见的精密位移检测方案,磁栅尺使用广泛,尤其适用于检测行程长、测量精度要求高、工况复杂的大型机床。磁栅尺安装方便,抗干扰能力强,抗冲击性强,不易受到振动、粉尘、水垢、油污等影响,耐高温和耐低温性能也较为突出。 二、磁栅尺基本组成与原理 磁栅尺主要由两个部分组成,磁尺和读磁头。 磁尺 磁尺是磁栅尺

Luckboy_shy的博客 1万+

C语言gdb调试在Linux的使用

编辑器:vim(vi)编译器:gcc调试器:gdb查找哪一行错误a、编译时必须加-g参数gcc -g error.c -o errorb、gdb 可执行程序的名字gdb errorc、设置断点b mainb 行号d、运行r (run)e、其他参数n (next)不进入子函数s (step)进子函数p (printf) a(要打印的值):打印某个值c (continue)可以直接跳出循环,执行下一步q (quit) 退出二级指针:指针的指针二级指针变量的内存空间中存放的是一级指针变量的地址定义一级指

weixin_48790169的博客 324

Django 前后端分离实战:网络设备运维系统 - 从登录认证到业务模块

这篇文章分享了Django+Vue前后端分离开发网络设备运维系统的实战经验,重点介绍了登录认证、全局布局和设备管理三大模块的实现。文章包含以下核心内容: 登录模块实现:包括表单验证、Token认证、记住密码功能,以及美观的UI设计(渐变背景、毛玻璃效果) 全局布局架构:采用侧边栏+顶部导航的响应式设计,支持菜单权限控制和多设备适配 业务功能开发:详细展示了设备分类和部门管理的CRUD功能实现,包括列表展示、搜索过滤、分页等功能 常见问题解决:提供了5个开发中常见问题的解决方案,如Vue Router警告、C

qq_16766705的博客 525

c语言 gdb查看core文件夹,使用gdb 和core 调试的方法

在linux编写C语言调试时,以前遇到问题时,特别是内存溢出等问题,都是通过手动添加调试信息来逐步锁定出问题的语句。这样做虽然简单,但比较麻烦。在一些负责程序或者不是自己写的程序时会难以定位,所以还算需要借助调试工具来定位。1)gdb编译时加上-g标志即可。运行时 gdb -g app 即可进入gdb调试模式一般指令就是1)list 2)break n 3) run 4)next 5)wher...

weixin_29029169的博客 3036

IEEE69节点数据(Matlab)

IEEE69节点数据(Matlab)

weixin_46039719的博客 1162

多模型动态路由(Fusion):从“算力霸权”到“架构分权”的工程范式转型

多模型动态路由(Multi-Model Dynamic Routing)是指在多个大语言模型之间,根据请求特征、资源约束和业务目标,动态选择最优模型或模型组合的技术范式。传统网关擅长管理请求流量,但不理解“任务类型”。而AI路由层需要对每个请求进行语义理解、能力匹配和成本评估。从“算力霸权”到“架构分权”,这不是技术的线性演进,而是工程范式的根本转型。过去三年,开发者的核心能力是“选对模型”——在GPT、Claude、Gemini之间做出正确选择。

ZDQ58818的博客 73

使用gdb调试c语言代码

1. 前言 编写代码过程中少不了调试。在windows下面,我们有visual studio工具。在linux下面呢,实际上除了gdb工具之外,你没有别的选择。那么,怎么用gdb进行调试呢?我们可以一步一步来试试看。 先写一个代码, 文件名01_1_gdb.c /* * @Author: sanjayzhong * @Github: https://github.com/sanjayzzz...

UnknownPlayer的博客 4644

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2032

c语言调试过程如何一直使用,一、C语言调试—— gdb 的使用

1.1 gdb 调试工具常用命令list:展开调试的源代码,缩写 l;break:设置断点,缩写为 b;info break:查看断点信息,缩写为 i bdelete:删除断点print:打印变量的值,缩写为 p;run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停;step:单步调试,可以进入子函数,缩写为 s;next:单步调试,不进入子函数,缩写为 n;c...

weixin_39598796的博客 242

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C语言使用----GDB调试

1、gdb退出命令:q。安装命令 yum -y install gdb 2、如果希望编译后的程序能够可以被调试,编译时要加-g的参数,-g把book的文件信息加到生成的book 例如gcc -g -o book book.c 在命令提示符下面输入gdb book就可以调试book程序了 3、基本调试命令 命令命令缩写 命令说明 set args 设置主程序的参数。 ...

Embedded learner的博客 2959

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用gdb调试C语言程序

将程序加载到调试器中,使用如下命令: [root@localhost c]# gdb testadd GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free softw

reg183的专栏 949

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

一、C语言调试—— gdb 的使用

1.1 gdb 调试工具常用命令 list:展开调试的源代码,缩写 l; break:设置断点,缩写为 b; info break:查看断点信息,缩写为 i b delete:删除断点 print:打印变量的值,缩写为 p; run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停; step:单步调试,可以进入子函数,缩写为 s; ...

dongbipi3785的博客 347

运行环境c语言gdb和lldb,一、C语言调试—— gdb 的使用

1.1 gdb 调试工具常用命令list:展开调试的源代码,缩写 l;break:设置断点,缩写为 b;info break:查看断点信息,缩写为 i bdelete:删除断点print:打印变量的值,缩写为 p;run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停;step:单步调试,可以进入子函数,缩写为 s;next:单步调试,不进入子函数,缩写为 n;c...

weixin_42514202的博客 1051

【C语言基础】gdb调试工具的使用

gdb基本调试案例:采内存

immerseinstudy的博客 2183

Ubuntu环境下使用GDB调试C语言项目

补充其他包:sudo apt-get install build-essential kernel-package libncurses5-dev libssl-dev。安装libncurses5-dev命令:apt-get install libncurses5-dev。报错:make: *** 没有规则可制作目标“menuconfig”。在内核配置中,确保启用了调试信息。记下内核版本号,例如 4.15.0-213-generic。首先,查看当前系统安装的内核版本。

向着光的那方 1029

C 语言使用GDB 调试

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33982670的博客 117

C语言中调试工具GDB的使用方法

2. sudo vi /etc/sysctl.conf最后一行添加kernel.core pattern1=core-e-op-t。1.sudo vi/etc/default/apport将enabled=1//修改为enabled=0。s1.编译 gcc demo.c -o demo -g//-g 调试添加调试信息。全局/静态变量 --- 全局/静态区。p 变量名 //查看数据 --- 程序必须运行到对应变量。l //list 查看代码 --- 每次查看10行。

m0_75060693的博客 256

c语言步进指令,gdb调试命令及基本使用姿势

gdb调试命令及基本使用姿势,C/C++调试工具gdb的基本使用姿势,linux下gdb调试,gdb调试工具,gdb调试命令,gdb调试教程,gdb调试实例一、gdb命令1、运行命令run:(简写 r) ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。continue (简写c ):继续执行,到下一个断点处(或运行结束)next:(简写 n),单步跟踪程序,当遇...

weixin_42352351的博客 2077

【C语言】【unix c】GDB调试工具的使用

【C语言】【unix c】GDB调试工具的使用

刘星燎 879

Linux编程:用于调试 C、C++ 和其他编程语言编写的程序的调试工具GDB的使用

GDB(GNU Debugger)是一个非常强大的调试工具,广泛用于调试 C、C++ 和其他编程语言编写的程序。设置断点:在程序指定位置暂停执行,便于观察程序状态。单步执行:逐行或逐指令执行程序,观察程序运行流程。查看变量值:在调试过程中,实时查看变量的当前值。跟踪函数调用:了解函数调用顺序和参数传递情况。动态修改变量值:在调试过程中修改变量值,测试不同情况下的程序行为。查看源代码:在调试过程中,随时查看当前执行到的源代码。多线程调试:支持多线程程序的调试,可以查看和切换线程。

weixin_70208651的博客 1307

【C语言】调试工具gdb的使用

step 也是执行下一行代码,但是遇到子函数的时候会进入到子函数中。next 执行下一行代码,不进入子函数,简写 n。r 运行,在断点处停止,显示一行即将运行的代码。从头开始重新运行只需要再按 r 然后选择 y。gcc test.c -g 生成可调式程序。gdb ./a.out 进入程序调试。回车代表默认重复执行上一条语句。b 20 在20行打一个断点。list打印代码,简写 l。p a 打印a这个变量。

weixin_55252589的博客 190
上一篇: 研究C语言的hello world输出
下一篇: vim入门使用手册
Chengdu.S
博客等级 码龄9年 282粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chengdu.S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值