借用阿甘老妈的一句话:“Life is like a box of chocolates, you never know what you're going to get.”。
自己做梦也不会想到,多年之后又回到Linux的世界中。生活中的事情有太多不确定性,但如果你准备的够充分,再怎么变化,也都在你的掌控之中。
今天来把自己多年都没有完全记下的GDB相关的东西写在blog里,随我到任何国度也可以信手捻来。
GDB是Linux世界中最常用的调试工具,主要功能就是下断点、单步、看变量的值,以及反汇编功能。其实并不复杂,而且你可以man一下它,就不怕自己忘记命令了。
前提:
编译出可调试的代码,例如:gcc -g test.c -o test
用GDB调试:gdb test
1.list命令(l)
列出代码,可以带行数或方法名,例如:l 13 或 l main
2.run命令
将程序跑起来
3.break命令
下断点,例如:
(gdb) break 函数名
(gdb) break 行号
(gdb) break 文件名:行号
(gdb) break 文件名:函数名
(gdb) break +偏移量
(gdb) break -偏移量
(gdb) break *地址
4.单步
next(n)单步执行,不会进入函数内部
step(s)却可以
until(u)直接退出循环体
5.continue(c)
继续,直到程序结束或下一个断点
6.print
程序停住后,打印运行数据
7.watch
观察某个表达式,一旦有变化,就停止运行并打印出相应的值。
8.examine
查看内存地址中的值
9.jump
参数可以是行号也可以是地址
10.signal
产生一个信号量,1~15(参见UNIX的信号量)
11.return
强制返回
12.call
强制调用某函数
13.info
查看信息如:
info registers
info all-registers
info registers <指定寄存器>
info break
info watchpoints
info signals
info handle
14.disassemble
反汇编,如:
disass main
参考:
《Linux设备驱动开发详解》
《C语言开发手册》
《Debug Hacks》