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::push_back,而不是 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::vectorstd::string 等只显示结构体字段,看不到实际数据。启用 Python 脚本支持就能自动展开:

  • 确认 gdb 支持 Python:gdb --version 输出含 python
  • 加载 GCC 自带的 pretty-printer:source /usr/share/gcc-*/python/libstdcxx/v6/printers.p

    y
    (路径按实际 GCC 版本调整)
  • 之后 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安全高效搭建个人网站?