添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

gdb介绍:

gdb是一个c/c++ 语言在gnu编译器下的debugger调试器,它支持单步调试,查看运行时内存,core-dump文件等功能;
它可以做很多事情来发现程序的bug,通过以下步骤:
a Start your program, specifying anything that might affect its behavior.
b Make your program stop on specified conditions.
c Examine what has happened, when your program has stopped.
d Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.
它还支持其他语言,具体见文档;
https://sourceware.org/gdb/download/onlinedocs/gdb/index.html

一个简单的例子:

https://sourceware.org/gdb/download/onlinedocs/gdb/Sample-Session.html#Sample-Session
在gcc编译时,带上-g

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(gdb) set width 70 设置gdb屏幕显示宽度为70列;
(gdb) break m4_changequote 设置一个断点,m4_changequote 这个是源文件中的一个函数名
Breakpoint 1 at 0x62f4: file builtin.c, line 879.
开始运行:
(gdb) run
Starting program: /work/Editorial/gdb/gnu/m4/m4
会在断点停住,并展示上下文信息:
Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)
at builtin.c:879
879 if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))
于是我们可以接着执行下一行:
(gdb) n #next,会执行下一行,但是碰到子函数不会进去;
882 set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
: nil,
(gdb) s #step 真正的单步调试,碰到子函数会进去一步一步执行
(gdb) finish 会将正在调试的函数执行完然后打印返回值,等待接下来的指令;简写:fin
(gdb) bt # backtrace 可以看到当前执行的backtrace
(gdb) p var #打印当前上下文 var变量的值 #print
(gdb) l 列出当前的代码 #list
(gdb) c #continue 继续执行直到结束
(gdb) Ctrl-d / quit 结束和退出gdb

常见指令:

系统教程:

如何进入和退出gdb