1. 启动GDB
(1)在可执行程序不需要参数时,可以使用:gdb + ./可执行文件,例如:
gdb ./main
(2)可执行程序需要参数时,我们使用 gdb --args + 可执行程序 + args
gdb --args ./main input.txt
2. 查看源码
# list 或者用简写l,默认向下,如果想向上的话要指定相应的负数 list -3
list
3. 运行程序
# 使用run命令运行程序,简写为r
run
3.设置断点
# 1. b + func
b main
# 2. b + file:line
b main.cpp:36
4. 查看断点
info b
5. 删除断点
# 1.删除指定断点
delete 3
# 2.删除所有断点
delete 回车,之后输入y确认删除所有断点
6. 单步执行
# 1.遇到函数不进入到函数里面 next(n) / ni
# 2.遇到函数调用进入到函数里面,step(s) / si
7. 查看变量
(gdb) p filename=0x7fffffffe0f6
$1 = 0x7fffffffe0f6 "work/video/sky.ts"
8. 退出
quit
9. GDB core文件
先使用
ulimit -c unlimited
然后正常跑一下代码就能跑出一个core文件
然后跑下面这样的就可以看看core里面到底怎么写的
gdb ./main core.11111
进入之后用
where
来定位core的位置
10. gdb带启动参数调试
比如代码为:
#include <iostream>
int main(int argc, char* argv[]) {
std::cout << "hello,world" << std::endl;
for (int i = 0; i < argc; i++) {
std::cout << argv[i] << std::endl;
}
}
编译:
g++ -g -o demo p1.cpp
得到:
demo p1.cpp
第一步:
gdb demo
第二步:
设置参数
set args test_arg1 test_arg2
这里是将所有的参数都放在set args后面。