使用GDB调试C++需先编译时加-g选项,再用gdb启动程序,设置断点、单步执行、查看变量和调用栈,结合信号处理与附加进程等技巧可高效定位段错误、逻辑错误和内存问题。

使用 GDB 调试 C++ 程序是开发中非常实用的技能,能帮助你定位段错误、逻辑错误和内存问题。以下是常用方法与命令,适合实际开发场景。
编译程序时加入调试信息
要使用 GDB 调试,必须在编译时添加 -g 选项,保留调试符号:
g++ -g -o myprogram myprogram.cpp
这样生成的可执行文件才能被 GDB 正确识别变量名、函数名和行号。
启动 GDB 并运行程序
进入调试环境:
立即学习“C++免费学习笔记(深入)”;
gdb ./myprogram
进入 GDB 后,输入 run(或简写 r)启动程序:
(gdb) run
也可以传递命令行参数:
(gdb) run arg1 arg2
设置断点
断点是调试的核心。常见设置方式:
按行号设断点:
(gdb) break 15 按函数名设断点:
(gdb) break main
(gdb) break MyClass::func 查看所有断点:
(gdb) info breakpoints 删除断点:
(gdb) delete 1(删除编号为1的断点)
单步执行与控制流程
程序暂停后,可用以下命令逐步执行:
next (n):执行下一行(不进入函数) step (s):进入函数内部 continue (c):继续运行直到下一个断点 finish:跳出当前函数 until:跳出循环或执行到指定行
查看变量和表达式
调试过程中可以实时查看数据:
print 变量名:
(gdb) print x
(gdb) print this->value display 表达式:每次暂停时自动显示该值
(gdb) display count ptype 变量:查看变量类型
(gdb) ptype myobj
检查调用栈
当程序崩溃或中断时,查看函数调用路径:
backtrace (bt):显示完整调用栈 frame n:切换到第 n 层栈帧 up / down:在栈帧间上下移动
例如,看到段错误时,用 bt 可快速定位出问题的函数和行号。
处理信号和异常
C++ 程序崩溃通常由 SIGSEGV 等信号触发。GDB 默认会暂停这类信号:
查看信号处理方式:
(gdb) info signals 让程序接收到信号时不中断:
(gdb) handle SIGPIPE nostop noprint
附加到正在运行的进程
如果程序已运行,可以用 GDB 挂载调试:
gdb ./myprogram 1234
其中 1234 是进程 PID。也可先启动 GDB 再附加:
(gdb) attach 1234
调试完用 detach 脱离进程。
实用技巧
使用 list 显示源码:
(gdb) list 10,20 显示第10到20行 设置条件断点:
(gdb) break 15 if i==10 保存调试命令到脚本:
写入 .gdbinit 文件自动加载配置 结合 valgrind 使用,排查内存泄漏基本上就这些。熟练掌握后,GDB 能极大提升 C++ 调试效率。
以上就是c++++怎么使用gdb进行程序调试_c++ gdb调试程序方法与命令的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1479805.html
微信扫一扫
支付宝扫一扫