当前位置: 首页 > article >正文

GDB 符号检视三件套:`ptype` / `info variables` / `info functions`

调试 NuttX/Vela 这类嵌入式系统时光会bt和print远远不够。真正能让你在陌生代码里快速定位、看清结构、批量布点的是 GDB 的符号检视命令。本文整理三件最常用的ptype—— 看类型长什么样info variables—— 找全局/静态变量在哪info functions—— 找函数在哪它们都不打印运行时值而是从符号表里捞元数据速度快、不依赖程序运行状态特别适合 coredump 离线分析。一、ptype—— 查看类型定义ptypeprint type只打印类型的结构不打印变量的值。常见用法命令作用ptype var查看变量的类型定义ptype type直接查看某个类型struct/union/enum/typedefptype/o struct显示 offset 和 size调试内存布局神器ptype/m class只显示成员不展开继承Cptype expr查看任意表达式的类型如ptype foo-bar[2].baz它能干什么看 struct 字段布局(gdb) ptype/o struct task_struct /* offset | size */ type struct task_struct { /* 0 | 8 */ long state; /* 8 | 8 */ void *stack; ...排查内存对齐、padding、字段偏移问题时比offsetof直观得多。typedef 穿透ptype size_t告诉你它实际是unsigned long避免猜类型。enum 取值ptype enum state_e一次性列出所有枚举值。函数签名ptype my_func显示返回值和参数类型特别适合调试函数指针。C 类层次ptype完整展开含虚函数表、继承ptype/m只看自身成员。判断指针 vs 数组源码里int a[10]和int *a看着像ptype一眼分清。与近邻命令对比print x/p x→ 看值ptype x→ 看类型whatis x→ 类型简版不展开 struct 成员一行输出info types regex→ 在符号表里搜类型名排查 crash 看 coredump 时ptype/o配合p *(struct foo *)0xaddr是定位「字段偏移踩错 / 结构体版本不一致」的常用组合。二、info variables—— 查找全局/静态变量info variables从符号表里捞全局和静态变量不打印值只告诉你叫什么、在哪、什么类型。基本用法命令作用info variables列出所有全局和静态变量通常很长info variables regex用正则过滤最常用info variables -n只看非调试符号minimal symbols典型场景找变量定义在哪(gdb) info variables ^g_task_list$ File kernel/sched/task.c: 42: struct list_head g_task_list;直接告诉你文件:行号 类型比翻代码快。模糊搜索忘了变量全名info variables uart.*config一搜就出。看驱动注册了哪些静态结构info variables _ops$找所有以_ops结尾的file_operations、uart_ops之类。核对链接产物某个static变量是否真的进了最终镜像。与近邻命令对比命令看什么info variables re全局/静态变量符号info functions re函数符号info types re类型名struct/typedef/enuminfo address sym单个符号的地址info symbol addr反查这个地址属于哪个符号print var拿到变量地址要先知道名字ptype var看类型定义⚠️局部变量不会出现在info variables里 —— 那是栈上的要用info locals/info args看当前帧。三、info functions—— 查找函数符号info functions与info variables是一对专门搜函数。基本用法命令作用info functions列出所有函数通常爆屏慎用info functions regex正则过滤最常用info functions -n只看非调试符号info functions -q requiet 模式不打印文件分组头info functions -t type re按返回类型过滤较新 GDB典型场景找函数定义在哪(gdb) info functions ^uart_open$ File drivers/serial/uart.c: 128: int uart_open(struct file *filep);直接给文件:行号 完整签名。模糊搜索info functions .*_init$列出所有_init结尾的初始化函数。看某模块对外接口info functions ^uart_列出 uart 子系统所有函数。C 重载/模板所有重载版本一并列出签名各异方便挑你要打断点的那个。静态函数也能找到只要带调试符号不像 grep 还要管作用域。调试组合拳(gdb) info functions probe # 模糊找入口 (gdb) b *uart_probe # 在函数入口下断点 (gdb) info address uart_probe # 拿函数地址用于函数指针比对 (gdb) disas uart_probe # 反汇编 (gdb) ptype uart_probe # 看签名 (gdb) rbreak ^uart_ # 给所有 uart_ 开头函数下断点批量与近邻命令对比命令用途info functions re列出匹配的函数符号rbreak re给匹配的函数批量下断点破坏性会真下断disas func反汇编整个函数体info line func看函数起始行号 → 地址映射ptype func看函数类型签名返回值/参数四、三件套联动crash 离线分析的标准流程假设 coredump 里看到一个陌生符号uart_priv出现在栈上(gdb) info variables ^uart_priv$ # 1. 在哪定义 File drivers/serial/uart.c: 89: static struct uart_priv_s uart_priv; (gdb) ptype uart_priv # 2. 类型长啥样 type struct uart_priv_s { int state; struct circbuf rx; ... } (gdb) ptype/o struct uart_priv_s # 3. 字段偏移确认 /* offset | size */ ... (gdb) p uart_priv # 4. 当前值是什么 $1 {state 2, rx {...}, ...} (gdb) info address uart_priv # 5. 物理地址对比 dump Symbol uart_priv is static at address 0x20001234.再配合info functions ^uart_把整套接口列出来整个驱动的轮廓 5 分钟内就能摸清。五、要点回顾你想知道…用什么这个类型长什么样字段偏移多少ptype/ptype/o这个全局变量定义在哪个文件info variables regex这个函数定义在哪签名是什么info functions regex这个地址是哪个符号info symbol addr这个符号的地址是多少info address sym三件套的共性只读符号表不依赖运行时。哪怕程序根本没跑起来只要 ELF 带调试信息就能用。这是它们在 coredump 分析里特别趁手的原因。ReferencesGDB 官方手册 · Symbol TablesGDB 官方手册 · Examining Data —ptype

相关文章:

GDB 符号检视三件套:`ptype` / `info variables` / `info functions`

调试 NuttX/Vela 这类嵌入式系统时,光会 bt 和 print 远远不够。真正能让你在陌生代码里快速定位、看清结构、批量布点的,是 GDB 的符号检视命令。本文整理三件最常用的: ptype —— 看类型长什么样info variables —— 找全局/静态变量在哪…...

基于LoRA与SFT技术构建中文大语言模型:从词表扩展到指令微调实战

1. 项目概述:为什么我们需要中文专属的大语言模型底座? 如果你在过去一年里尝试过用开源的大语言模型(LLM)来处理中文任务,大概率会遇到过这样的尴尬:模型对英文指令理解得很好,但一换成中文&am…...

hackGPT:基于大语言模型的智能命令行安全工具实践

1. 项目概述:当黑客工具遇上大语言模型最近在安全研究和自动化工具开发的圈子里,一个名为“hackGPT”的项目引起了我的注意。这个由NoDataFound开源的仓库,名字本身就充满了噱头——它将“黑客”(hack)与当下最热的大语…...

论文Review 3DGS | Deformable Beta Splatting | 用 Beta Kernel 替代 Gaussian Kernel 的实时辐射场渲染方法

基本信息 题目:Deformable Beta Splatting 作者:Rong Liu, Dylan Sun, Meida Chen, Yue Wang, Andrew Feng 单位:University of Southern California / Institute for Creative Technologies 时间:2025 年 5 月,ar…...

利用Taotoken为开源项目提供可配置的AI功能模块

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken为开源项目提供可配置的AI功能模块 为开源项目集成人工智能能力,正成为提升项目实用性和吸引力的有效方式…...

Rusted PackFile Manager:全面战争模组制作的新手入门完全指南

Rusted PackFile Manager:全面战争模组制作的新手入门完全指南 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: htt…...

用PyQt5给树莓派人脸门禁做个图形界面:从Qt Designer设计到移植上板的完整流程

树莓派人脸门禁系统GUI开发实战:从Qt设计到嵌入式部署的全链路解析 当硬件项目需要与用户交互时,一个直观的图形界面往往能大幅提升使用体验。本文将带您完整实现一个基于树莓派的人脸识别门禁系统GUI应用,涵盖从桌面端设计到嵌入式部署的全…...

JiYuTrainer终极指南:三步解锁极域电子教室,恢复学习自由

JiYuTrainer终极指南:三步解锁极域电子教室,恢复学习自由 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学时代,极域电子教室为学生…...

Open-Meteo:高性能开源天气API架构深度解析与技术实践

Open-Meteo:高性能开源天气API架构深度解析与技术实践 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo 技术痛点与解决方案定位 传统天气数据服务面临三大技术…...

终极指南:如何为yt-dlp-gui扩展新的视频平台支持

终极指南:如何为yt-dlp-gui扩展新的视频平台支持 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 你是否曾遇到过想要下载某个小众视频平台的视频,却发现yt-dlp-gui无法识别链接&am…...

从PyQt5迁移到PyQt6:一个真实项目的踩坑与平滑升级实战记录

从PyQt5迁移到PyQt6:一个真实项目的踩坑与平滑升级实战记录 在Python GUI开发领域,PyQt一直是许多开发者的首选工具包。当PyQt6发布时,我们团队面临一个关键决策:是否要将正在开发中的数据分析平台从PyQt5迁移到新版本。这个决策不…...

C#实战:利用NModbus4库高效读写西门子PLC浮点数据

1. 为什么选择NModbus4与西门子PLC通信? 在工业自动化领域,西门子PLC作为主流控制器,经常需要与上位机进行数据交换。而Modbus TCP协议因其跨平台性和简单易用的特点,成为连接不同厂商设备的通用方案。我在多个工业数据采集项目中…...

保姆级教程:将LabelImg标注的VOC数据一键转为Ultralytics RT-DETR训练格式

从VOC到RT-DETR:零基础完成目标检测数据格式转换实战 当你第一次尝试用Ultralytics框架训练RT-DETR模型时,最令人头疼的往往不是模型调参,而是数据准备阶段——特别是当你的标注数据还停留在LabelImg生成的VOC格式(XML文件&#x…...

东方博宜OJ入门题解:从A+B到高精度算法的实战解析

1. 东方博宜OJ平台入门指南 第一次接触在线评测系统(OJ)时,很多人都会被各种题目搞得晕头转向。东方博宜OJ作为国内知名的编程练习平台,特别适合编程新手从零开始系统学习。我刚开始刷题时也走过不少弯路,今天就和大家分享一些实战经验。 这…...

不只是安装:用MATLAB+RTL-SDR硬件支持包快速上手你的第一个无线信号接收项目

不只是安装:用MATLABRTL-SDR硬件支持包快速上手你的第一个无线信号接收项目 当你第一次将RTL-SDR设备插入电脑,安装完MATLAB硬件支持包后,那种既兴奋又迷茫的感觉可能还记忆犹新。硬件已经就绪,软件也已安装,但接下来该…...

NoFences:三分钟让你的Windows桌面从混乱到有序的免费开源方案

NoFences:三分钟让你的Windows桌面从混乱到有序的免费开源方案 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否也曾面对满屏杂乱无章的图标感到无从下手&am…...

基于龙芯2K1000LA的可信计算在工业边缘安全中的实践

1. 项目概述:当“可信计算”遇上工业边缘 最近在做一个工业数据采集与边缘处理的项目,客户对数据安全的要求提到了前所未有的高度。他们不仅担心数据在传输过程中被窃取,更担心边缘设备本身被恶意篡改,导致采集的数据在源头就“失…...

从CTF赛题到真实漏洞:LFSR与BM算法在流密码攻击中的实战指南

从CTF赛题到真实漏洞:LFSR与BM算法在流密码攻击中的实战指南 在网络安全竞赛中,线性反馈移位寄存器(LFSR)类题目一直是密码分析方向的经典题型。许多参赛者第一次接触这类题目时,往往会被其数学理论吓退,但…...

从零开始在个人项目中接入Taotoken的完整步骤与体会

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从零开始在个人项目中接入Taotoken的完整步骤与体会 最近在维护一个个人开发的智能写作助手项目,最初直接使用了某家模…...

ARM架构TRFCR_EL2寄存器解析与虚拟化调试应用

1. ARM架构TRFCR_EL2寄存器深度解析在ARMv8/v9体系结构中,TRFCR_EL2(Trace Filter Control Register at EL2)是一个关键的系统寄存器,专门用于管理EL2(Hypervisor)级别的追踪过滤行为。这个寄存器在虚拟化环…...

告别密集计算:用SpConv稀疏卷积加速3D点云处理(附PyTorch代码示例)

告别密集计算:用SpConv稀疏卷积加速3D点云处理实战指南 在自动驾驶和机器人感知领域,LiDAR点云数据的处理一直是计算密集型任务的代表。传统3D卷积神经网络在处理这类数据时,往往需要消耗大量显存和计算资源,而实际上点云数据的有…...

5步掌握Beyond Compare 5逆向工程:RSA加密破解与密钥生成实战

5步掌握Beyond Compare 5逆向工程:RSA加密破解与密钥生成实战 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 软件授权逆向工程是信息安全领域的重要研究方向,通过分析Be…...

Banana Pi BPI-M2S边缘AI开发板:双千兆网口与5TOPS NPU实战指南

1. 项目概述:一块为边缘AI与网络应用而生的全能型单板计算机 最近在捣鼓一些边缘计算和轻量级网络服务的项目,一直在寻找一块性能足够、接口丰富,同时性价比又不错的开发板。市面上常见的树莓派4B固然经典,但在面对需要一定AI推理…...

从架构到应用:DNNGP、DeepGS与DLGWAS三大基因预测模型深度剖析

1. 基因预测模型的崛起与挑战 基因组学研究正在经历一场由AI驱动的革命。过去十年间,随着高通量测序技术的普及,生物医学领域积累了海量的基因数据,但传统统计方法在处理复杂性状预测时逐渐显得力不从心。正是在这样的背景下,DNNG…...

魔兽争霸3终极增强插件:8大功能全面提升游戏体验完整指南

魔兽争霸3终极增强插件:8大功能全面提升游戏体验完整指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代系统上的兼…...

VMware ESXi版本回退全攻略:从适用条件、DCUI操作到6.x升7.0的‘后悔药’失效分析

VMware ESXi版本回退深度解析:从技术原理到实战避坑指南 在虚拟化运维领域,版本升级往往伴随着不可预知的风险。当新版本出现兼容性问题或性能异常时,版本回退能力就成为系统管理员手中的"后悔药"。然而,不同于普通软件…...

使用Python快速接入Taotoken聚合大模型API的简明教程

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Python快速接入Taotoken聚合大模型API的简明教程 本文面向希望快速集成大模型能力的Python开发者,介绍如何通过官方…...

STM32F407驱动0.96寸OLED屏:除了SPI,你还可以试试这几种通信方式(I2C/8080对比)

STM32F407驱动0.96寸OLED屏:SPI、I2C与8080接口的深度技术选型指南 当你在STM32F407VET6核心板上连接0.96寸OLED模块时,第一个技术决策往往就是通信接口的选择。这个看似简单的选择实际上会影响整个项目的硬件设计复杂度、软件维护成本以及最终显示性能。…...

STM32的RTC掉电还能走时?深入聊聊后备域和纽扣电池那点事

STM32的RTC掉电还能走时?深入聊聊后备域和纽扣电池那点事 当你在深夜调试STM32的RTC功能时,是否曾好奇过这个小巧的实时时钟为何能在主电源断开后依然精准走时?这背后隐藏着STM32芯片设计中一个精妙的电源管理机制——后备域(Back…...

STM32驱动MAX31855测温模块:从SPI时序到代码实现的保姆级避坑指南

STM32驱动MAX31855测温模块:从SPI时序到代码实现的保姆级避坑指南 在嵌入式开发领域,精确的温度测量往往是项目成败的关键。MAX31855作为一款集成冷端补偿的热电偶数字转换器,凭借其2℃的高精度和-200℃至700℃的宽测温范围,成为工…...