GDB调试器 GDB 调试器1. 调试前准备1.1 编译带调试信息的程序必须要使用 GDB编译时必须加上-g选项建议同时关闭优化gcc -g -O0 -o demo demo.c-g在可执行文件中生成调试符号源码行号、变量名等。-O0关闭编译器优化。优化后的代码行号可能与源码错位变量可能被存入寄存器导致无法查看。2. 启动与基础控制启动调试gdb ./demo带参数运行(gdb) run arg1 arg2退出 GDB(gdb) quit或q3. 断点管理 (Breakpoints)断点是让程序在指定位置暂停执行的“监控点”。命令说明break main在main函数入口设置断点break demo.c:n在demo.c文件的第 n 行设置断点break demo.c:n if x 10条件断点仅当x 10时才暂停info break查看所有已设置的断点及其编号delete n删除编号为 n 的断点disable n/enable n禁用 / 启用编号为 n 的断点tbreak demo.c:30临时断点触发一次后自动删除4. 程序执行与单步控制命令简写说明runr从头开始运行程序直到遇到断点continuec继续执行直到遇到下一个断点或程序结束nextn单步执行不进入函数内部把函数当作一行执行steps单步执行进入函数内部逐行调试finish-一直执行到当前函数返回然后暂停until-继续执行到当前循环结束跳出循环5. 数据查看与修改5.1 查看变量与内存print x或p x打印变量x的值。print /x x以十六进制格式打印变量。display x设置自动显示每次程序暂停时都会自动打印x的值。info locals查看当前函数所有的局部变量。info registers查看 CPU 寄存器的当前状态。5.2 修改变量动态干预set variable x 100在运行时强行将变量x的值修改为 100。5.3 监视变量变化 (Watchpoints)watch x当变量x的值发生改变时程序自动暂停。非常适合排查“谁偷偷修改了这个变量”。6. 堆栈分析 (Stack Trace)当程序崩溃如 Segmentation fault或逻辑混乱时堆栈分析是定位问题的终极武器。backtrace或bt打印完整的函数调用链。崩溃时最顶部的栈帧就是出错的位置。frame 2切换到调用栈的第 2 层。info frame查看当前栈帧的详细信息如局部变量地址、参数等。7. 进阶Core Dump 崩溃快照分析当程序在生产环境崩溃时无法实时挂载 GDB此时需要分析 Core Dump 文件。7.1 开启 Core Dump 生成ulimit -c unlimited # 临时开启允许生成无大小限制的 core 文件7.2 调试 Core 文件程序崩溃后会在当前目录生成core或core.xxxx文件gdb ./demo core.xxxx进入 GDB 后直接输入bt查看崩溃时的调用栈配合frame n和info locals即可还原崩溃现场。8. 进阶附加到正在运行的进程如果服务器上的程序卡死或陷入死循环可以在不重启程序的情况下进行调试找到进程 PIDps -ef | grep demo附加 GDBsudo gdb -p PID此时程序会被暂停你可以使用bt查看卡在哪一行或使用info threads查看多线程状态。调试完毕后输入detach分离进程程序继续运行或quit退出程序会被终止。9. 提升效率的 GDB 配置在用户主目录创建~/.gdbinit文件添加以下配置可大幅提升体验set style enabled on # 开启彩色高亮显示set output-radix 16 # 默认以十六进制显示数字define r # 设置快捷命令run配置后在 GDB 中只需输入r即可直接运行程序。

相关新闻

最新新闻

【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging

【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging

列的目的是:借着对 OpenClaw-RL 源码的学习,来梳理强化学习的一些相关概念和思想。所以,会有一些基础知识、扩展和发散,OpenClaw-RL 只是一个切入点。而且,因为整篇系列是一个整体,所以有些概念的解读/学习…

2026/7/23 13:59:44
LTC1563-2IGN#PBF在工业传感器与通信系统中的有源滤波方案

LTC1563-2IGN#PBF在工业传感器与通信系统中的有源滤波方案

LTC1563-2IGN#PBF:ADI 易用型4阶有源低通滤波器深度解析在信号调理、数据采集、音频处理以及通信系统的前端设计中,如何以简洁的电路实现高性能的低通滤波,同时保持设计的灵活性和低功耗,往往是工程师面临的一项核心挑战。传统的分…

2026/7/23 13:59:44
深入解析TI LM3S2965:基于Cortex-M3的电机控制与工业通信实战

深入解析TI LM3S2965:基于Cortex-M3的电机控制与工业通信实战

1. 项目概述与核心价值 在嵌入式开发领域,选对一颗微控制器(MCU)往往意味着项目成功了一半。今天我想深入聊聊德州仪器(TI)的Stellaris LM3S2965这颗芯片。它不是一颗新出的“网红”芯片,但在很多经典的工业…

2026/7/23 13:59:44
win11+ubuntu(22.04版本)双系统配置流程(一)

win11+ubuntu(22.04版本)双系统配置流程(一)

1. 准备工作 1.1 准备一台安装了 Windows 11 的电脑和存储大于 8GB 的 U 盘 楼主这里使用的笔记本,型号神舟 S8D6;闪迪的 U 盘,U 盘内重要资料记得保存,制作成系统盘后 U 盘内其他数据会清空。 1.2 确认引导模式 检查 BIOS 模…

2026/7/23 13:59:44
SQL注入实战指南:从原理到CTFshow通关技巧

SQL注入实战指南:从原理到CTFshow通关技巧

1. 项目概述:从入门到实战的SQL注入通关指南如果你正在学习网络安全,尤其是Web安全方向,那么“CTFshow Web入门 SQL注入197-215”这个系列题目绝对是一个绕不开的实战演练场。这不仅仅是一套题目,更像是一位经验丰富的师傅为你精心…

2026/7/23 13:59:44
Circle Loss:深度度量学习的圆形决策边界优化

Circle Loss:深度度量学习的圆形决策边界优化

1. Circle Loss:从线性到圆形的优化革命 第一次看到Circle Loss这篇论文时,我正被项目中的人脸识别性能瓶颈困扰。传统的Triplet Loss调参就像在走钢丝,而Softmax分类又总觉得少了点什么。直到发现这个将两种范式统一起来的圆形决策边界&…

2026/7/23 13:54:44

月新闻