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即可直接运行程序。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/2 15:29:32
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻