c++如何使用gdb调试程序_c++ gdb常用命令汇总【工具】
发布时间 - 2026-01-29 00:00:00 点击率:次用 catch throw、catch syscall brk 或 handle SIGSEGV stop print 捕获崩溃第一现场;编译加 -g -O0 避免内联干扰;对模板函数打具体实例断点;变量显示为 时启用 -fvar-tracking-assignments 或 volatile;启用 libstdc++ pretty-printer 查看 STL 内容。
gdb 启动时程序就崩溃,怎么定位第一现场?
直接用 gdb ./a.out 启动后别急着 run,先设一个“崩溃捕获点”:catch throw(C++ 异常)、catch syscall brk(内存分配失败)、或者更通用的 handle SIGSEGV stop print。这样程序一触发段错误,gdb 就立刻停住,bt 看栈、info registers 看寄存器、x/10i $rip 看出问题的汇编指令——比等 run 完再看 core dump 快得多。
断点打在内联函数或模板实例上没反应?
gcc 编译时默认开启优化(-O2)会把简单函数内联掉,gdb 就找不到原始符号。必须加 -g -O0 重新编译;如果非得带优化调试,至少用 -g -O1 并配合 set debug inline-debug 1 查看内联展开信息。另外模板函数要打具体实例的断点,比如 std::vector,而不是 std::vector::push_back —— 后者 gdb 根本不认。
变量显示为 怎么办?
这是最常见也最烦人的提示,本质是编译器把变量存在寄存器里、没写回栈,或者被整个优化掉了。解决路径很明确:
- 编译加
-O0 -g(开发阶段首选) - 若必须开优化,加
-O2 -g -fvar-tracking-assignments(GCC ≥4.7),让调试信息更精细 - 用
print &var_name看地址,再x/d &var_name手动读内存(适用于局部变量未被完全消除的情况) - 临时加
volatile声明(仅调试用):volatile int x = 42;,阻止编译器优化该变量
想看 STL 容器内容却只能看到指针和 size?
gdb 默认对 std::vector、std::string 等只显示结构体字段,看不到实际数据。启用 Python 脚本支持就能自动展开:
- 确认 gdb 支持 Python:
gdb --version输出含python - 加载 GCC 自带的 pretty-printer:
source /usr/share/gcc-*/python/libstdcxx/v6/printers.p(路径按实际 GCC 版本调整)
y
- 之后
print vec就能直接看到 vector 内容,print str显示 string 字符串而非指针 - 如遇路径问题,可改用
set auto-load safe-path /允许自动加载,再运行程序触发 auto-load
没有 pretty-printer 时,硬查 std::vector 得靠 print *(int*)vec._M_impl._M_start@vec.size() 这类表达式,既难写又易错——别硬扛,配好脚本是底线。
# python
# 工具
# 栈
# c++
# igs
# print
# String
# throw
# catch
# auto
# 局部变量
# 字符串
# 结构体
# int
# volatile
# 指针
# 就能
# 这是
# 第一现场
# 适用于
# 这类
# 掉了
# 只显示
# 想看
# 会把
# 再看
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么连接多个数据库_Laravel多数据库连接配置
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何自定义建站之星网站的导航菜单样式?
如何在服务器上配置二级域名建站?
浅谈Javascript中的Label语句
phpredis提高消息队列的实时性方法(推荐)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
如何在腾讯云服务器上快速搭建个人网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
新三国志曹操传主线渭水交兵攻略
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何在建站之星网店版论坛获取技术支持?
Bootstrap整体框架之JavaScript插件架构
如何在Windows环境下新建FTP站点并设置权限?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何快速搭建高效香港服务器网站?
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
如何用PHP快速搭建CMS系统?
bootstrap日历插件datetimepicker使用方法
如何快速建站并高效导出源代码?
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
EditPlus中的正则表达式 实战(2)
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
历史网站制作软件,华为如何找回被删除的网站?
利用python获取某年中每个月的第一天和最后一天
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
网站建设保证美观性,需要考虑的几点问题!
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何挑选优质建站一级代理提升网站排名?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
如何用美橙互联一键搭建多站合一网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何为不同团队 ID 动态生成多个非值班状态按钮
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何使用Gate和Policy进行授权?(权限控制)
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
php485函数参数是什么意思_php485各参数详细说明【介绍】
浅谈redis在项目中的应用
如何用5美元大硬盘VPS安全高效搭建个人网站?
上一篇:ourplay如何退出账号
上一篇:ourplay如何退出账号


