讲师中心 微信公众号
AI工具推荐 视频效率加速

GCC Debug调试怎么查看函数调用栈

浅磊吖_5974

浅磊吖_5974

发布时间:2026-08-11 17:22:10

|

813人浏览过

|

来源于php中文网

原创

gdb中backtrace(bt)可直接显示断点处调用栈,需-g编译;bt full显示局部变量,info frame查看单帧细节如返回地址和栈布局,程序内可用backtrace()函数配合-rdynamic打印栈信息。

gcc debug调试怎么查看函数调用栈

gdb 里用 backtrace 看调用栈最直接

只要程序在断点处暂停,backtrace(或简写为 bt)就能立刻列出当前执行路径上所有未返回的函数。它不依赖源码是否带符号,但必须用 -g 编译,否则只显示地址,看不到函数名。

常见错误现象:运行 bt 后输出全是 ?? 或十六进制地址 —— 这基本说明没加 -g,或者链接了 stripped 的库。

  • 编译时务必加 -g:gcc -g -O0 test.c -o test
  • 如果用了 -fomit-frame-pointer(某些优化级别默认开启),部分栈帧可能丢失,bt 会不完整;加 -fno-omit-frame-pointer 可修复
  • bt full 会额外显示每个栈帧的局部变量和参数,但前提是这些变量没被优化掉(-O0 最保险)

info frame 查看单个栈帧的细节

当你需要确认某一层调用的参数值、返回地址或栈布局时,info frame 比 backtrace 更细粒度。它告诉你当前帧的 saved rip(返回地址)、caller's stack frame 位置、以及该帧在内存中的起始/结束地址。

使用场景:怀疑某次函数调用传参错误,或想验证栈帧是否被破坏(比如 buffer overflow 后 bt 显示异常,这时 info frame 能看出 rbp 是否对齐、rip 是否指向合理代码段)。

ZFCC工期索赔.海合会实务(SCL+GCC)
ZFCC工期索赔.海合会实务(SCL+GCC)

基于SCL准则与海合会国家法规的对比分析,提供海合会地区工程工期索赔的专业指导,覆盖SCL协议适用、伊斯兰法影响、本地法律要求等核心内容。

下载
  • 先用 bt 确认目标帧编号(比如 #2),再执行 frame 2 切过去,然后 info frame
  • info args 和 info locals 是它的轻量替代,适合快速检查参数和变量,但不显示内存布局
  • 注意:在内联函数或尾调用优化后,某些帧可能被合并或省略,info frame 也会反映这种“缺失”

程序运行时主动打印调用栈用 backtrace()

不是所有问题都能靠 gdb 复现(比如线上偶发 crash、无 core dump 的 exit)。这时可以在代码里插桩,用 execinfo.h 提供的 backtrace() + backtrace_symbols() 把栈信息写到日志。

容易踩的坑:符号解析依赖可执行文件未 strip,且 backtrace_symbols() 返回的字符串需手动 free();若只想要函数名(不带偏移),得配合 addr2line 或 dladdr() 做二次解析。

  • 编译时加 -rdynamic(等价于 --export-dynamic),否则动态链接的符号无法被 backtrace_symbols() 解析
  • 数组大小要足够:void *buffer[64] 比 [16] 更稳妥,深层递归或复杂调用链容易溢出
  • 不要在信号处理函数(如 SIGSEGV handler)里直接调用 printf 或 malloc —— 它们不是 async-signal-safe;改用 write(2) 输出原始字符串

-finstrument-functions 不适合常规调试

这个 GCC 选项会在每个函数入口/出口插入回调,理论上能记录完整调用流,但它生成的 trace 量极大,且必须自己实现 __cyg_profile_func_enter/exit,还要处理多线程竞争、性能毛刺等问题。日常调试远不如 gdb 的 bt 直观可靠。

真正适合它的场景极少:比如做静态调用图生成、或嵌入式环境无法跑 gdb 时做粗粒度路径审计。普通开发中,它带来的编译慢、二进制膨胀、难以过滤噪音等问题,远超收益。

  • 启用后必须链接 -lc,否则 undefined reference 错误
  • 回调函数里不能调用任何非 async-signal-safe 函数(包括 printf、malloc),否则可能死锁
  • 它不记录栈帧内容(参数/变量),只记录函数地址和调用点,无法替代 info locals 类功能
函数调用栈不是静态快照,而是寄存器状态、栈内存、调试符号三者共同作用的结果。哪怕命令敲得再熟,只要其中一环缺失(比如忘了 -rdynamic 却指望 backtrace_symbols() 输出函数名),结果就不可信。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5187

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

100

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

80

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

60

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

80

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

280

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

180

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn