基础用法
-
启动程序
在GDB中加载程序后(gdb ./my_program
),输入r
直接运行:(gdb) r
程序会从头执行,直到遇到断点、崩溃或正常结束。
-
带参数运行
若程序需命令行参数,在r
后直接添加:(gdb) r arg1 arg2 "arg with space"
示例:调试
./server -p 8080
时,输入r -p 8080
。 -
重定向输入/输出
使用<
和>
重定向标准流:(gdb) r < input.txt > output.log 2>&1
< input.txt
:从文件读取输入> output.log
:输出重定向到文件2>&1
:合并错误流到输出流
高级控制
-
设置环境变量
用set environment
定义运行时环境变量:(gdb) set env LD_PRELOAD=/path/to/lib.so (gdb) r
-
运行到指定位置
结合断点控制执行流程:- 在
main
函数设断点:b main
- 运行到断点处暂停:
r
- 继续执行到第20行:
until 20
- 在
-
传递信号管理
控制程序接收的信号:(gdb) handle SIGINT nostop # 忽略SIGINT中断 (gdb) r
常见问题解决
-
错误提示
No executable specified, use 'file'
未加载可执行文件,需先输入file ./my_program
。 -
重新运行程序
输入r
会重启程序,保留当前断点和变量设置。 -
程序崩溃时
GDB自动暂停,用bt
查看崩溃堆栈,info registers
检查寄存器状态。 -
调试多进程程序
使用set follow-fork-mode child
跟踪子进程。
实用技巧
-
条件运行
仅当条件满足时启动:(gdb) break main if argc > 1 (gdb) r
-
记录执行轨迹
配合日志功能复现问题:(gdb) set trace-commands on (gdb) r
-
与
start
命令区别start
:暂停在main
函数首行(自动设临时断点)run
:直接执行,依赖手动断点控制
r
是GDB中控制程序执行的入口命令,核心要点包括:
- 基础运行:
r [参数]
- 重定向:
r < in > out
- 环境控制:
set env
预配置变量 - 协同断点:先设断点再运行
- 错误诊断:崩溃时用
bt
分析堆栈
引用说明基于GDB 13.2官方手册(GDB Documentation)及Linux调试实践,GDB命令遵循POSIX标准,适用于Linux/macOS/WSL环境。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6959.html