gdb操作简单版
gdb操作简单版
Hoshea ZhangCSAPP的前置gdb课程,学习一下基本操作
简介
1 |
|
使用gdb时,我们需要在g++后面加上-g:
1 | g++ -g -std=c++14 basic1.cc -o basic1 |
Command
run
运行程序
break
break后面可以加行号,可以加函数名:
在后面可以加条件
if condition
1
2break 7
break main例子:
1
2
3
4
5
6
7(gdb) break 7
Breakpoint 1 at 0x40085c: file basic1.cc, line 7.
(gdb) run
Starting program: /home/hoshea/Desktop/gdb/basic1
Breakpoint 1, main () at basic1.cc:7
7 j +=k;next
运行下一行
list
观察附近的代码
print
打印需要的值
1
2print j
print k+jquit
退出
up/down
up 当前命令行/函数是谁在调用
down就是往下
display/undisplay
1
display j
每次运行都会显示j
backtrace
查看目前的函数栈情况
step
深入函数内部
continue
到下一个断点
finish
结束这个函数
watch x
当x的值发生变化时,gdb会提示
info
info
是一个常用的指令,用于获取程序执行状态的信息。info
指令后面可以跟随不同的参数,以获取不同类型的信息。whatis
whatis 是GDB用来判断变量的类型的。是相当好用的一个功能。
1
2
3
4
5
6
7
8(gdb) b main
Breakpoint 12 at 0x403509: file src/core/nginx.c, line 201.
(gdb) whatis main
type = int (int, char * const *)
(gdb) whatis 0x403509
type = int
(gdb) whatis (0x403509)
type = inttarget record-full
反向调试
调试段错误
例子:
1 |
|
1 | $ gcc segfault.c -g -o segfault |