编写代码过程中少不了调试。在windows下面,我们有visual studio工具。在linux下面呢,可以用GNU组织开发的一套C语言编译器(Gcc)和调试工具(Gdb)。在哟个gdb进行调试的过程中,有几点是需要注意的:
-
Gdb进行调试的是可执行文件, 而不是".c"源文件, 因此, 需要先通过Gcc编译生成可执行文件才能用Gdb进行调试.
-
一定要加上选项"-g", 这样编译出的可执行代码中才包含调试信息, 否则Gdb无法载入该可执行文件.
-
不能使用 -O2选项对可执行文件进行优化, 因为优化之后可执行文件里的符号表信息将被删除, 这样Gdb就无法找到使可执行文件与源文件之间的关联了, 也就不能调试了.
首先生成可执行文件,输入命令之后,如果没有编译和链接方面的错误,你就可以看到 可执行文件test了。
调试的步骤基本如下所示,
(01) 首先,输入gdb test
(02) 进入到gdb的调试界面之后,输入
list/l,即可看到test.c源文件
(03) 设置断点,输入
b main
如果程序需要参数,就运行 run args <原来程序需要的参数>
或者 r <原来程序需要的参数>
(04) 启动test程序,输入
run/r
(05) 程序在main开始的地方设置了断点,所以程序之后断住
(06) 这时候,可以单步跟踪。s单步可以进入到函数,而n单步则越过函数
(07) 如果希望从断点处继续运行程序,输入c
(08) 希望程序运行到函数结束,输入finish
(09) 查看断点信息,输入 info break
(10) 如果希望查看堆栈信息,输入bt
(11) 希望查看内存,输入 x/64xh + 内存地址
(12) 删除断点,则输入delete break + 断点序号
(13) 希望查看函数局部变量的数值,可以输入print/p + 变量名
(14) 希望修改内存值,直接输入 print + *地址 = 数值
(15) 希望实时打印变量的数值,可以输入display + 变量名
(16) 查看函数的汇编代码,输入 disassemble + 函数名
(17) 退出调试输入quit即可
阅读(2301) | 评论(0) | 转发(0) |