0

0

c++怎么用gdb调试程序_c++ gdb调试方法

尼克

尼克

发布时间:2025-10-09 22:02:01

|

171人浏览过

|

来源于php中文网

原创

使用GDB调试C++程序需先编译时加-g选项生成调试信息,再通过gdb ./main启动,用run运行程序,break设置断点,next和step单步执行,print查看变量值,list显示代码,continue继续执行,崩溃时用gdb分析core文件并bt查看调用栈,结合layout src、watch等技巧提升效率。

c++怎么用gdb调试程序_c++ gdb调试方法

使用GDB调试C++程序是开发过程中排查问题的重要手段。只要编译时加入调试信息,就可以通过GDB逐步执行代码、查看变量值、设置断点等操作来定位错误。

1. 编译程序时添加调试信息

要让GDB能正确读取变量名、函数名和行号,必须在编译时加上 -g 选项:

  • g++ -g main.cpp -o main

这样生成的可执行文件会包含调试符号,GDB才能正常工作。发布版本通常不加 -g 来减小体积。

2. 启动GDB并运行程序

用以下命令启动GDB:

立即学习C++免费学习笔记(深入)”;

  • gdb ./main

进入GDB后,输入 run(或简写为 r)来运行程序:

  • (gdb) run

也可以在 run 后面加命令行参数,比如 run arg1 arg2

3. 设置断点

断点可以让程序执行到某一行暂停,方便检查状态:

HTTPie AI
HTTPie AI

AI API开发工具

下载
  • (gdb) break main # 在 main 函数处设断点
  • (gdb) break 10 # 在第10行设断点
  • (gdb) break funcName # 在函数 funcName 入口处停住

查看所有断点用 info breakpoints,删除用 delete breakpoint N(N为编号)。

4. 单步执行与查看变量

程序暂停后,常用命令有:

  • (gdb) next # 执行下一行(不进入函数)
  • (gdb) step # 进入函数内部
  • (gdb) print x # 查看变量 x 的值
  • (gdb) list # 显示当前代码上下文
  • (gdb) continue # 继续运行直到下一个断点

print 命令支持表达式,如 print x + y 或调用简单函数。

5. 处理崩溃程序(Core Dump)

如果程序崩溃生成了 core 文件,可以用GDB分析:

  • gdb ./main core

进入后输入 bt(backtrace)查看调用,快速定位崩溃位置。

6. 其他实用技巧

一些提高效率的操作:

  • 使用 layout src 切换到源码视图(TUI模式)
  • watch x 设置观察点,当变量x改变时暂停
  • finish 命令跳出当前函数
  • 调试多线程程序时用 thread 查看和切换线程

基本上就这些。掌握基本命令后,可以更高效地发现逻辑错误、内存越界等问题。GDB功能强大,但关键是熟悉常用操作,结合实际问题灵活使用。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.09.27

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

116

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

253

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

253

2025.10.24

堆和栈的区别
堆和栈的区别

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

366

2023.07.18

堆和栈区别
堆和栈区别

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

561

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

469

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

106

2025.12.24

小游戏4399大全
小游戏4399大全

4399小游戏免费秒玩大全来了!无需下载、即点即玩,涵盖动作、冒险、益智、射击、体育、双人等全品类热门小游戏。经典如《黄金矿工》《森林冰火人》《狂扁小朋友》一应俱全,每日更新最新H5游戏,支持电脑与手机跨端畅玩。访问4399小游戏中心,重温童年回忆,畅享轻松娱乐时光!官方入口安全绿色,无插件、无广告干扰,打开即玩,快乐秒达!

30

2025.12.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 0.9万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

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

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号