linux下调试代码虽然没有windows下调试代码那么方便,但有gdb这个调试工具,也会让我们在linux下开发变得简单,方便。
gdb 简单功能的运用:
1、查看执行文件的源码。
对于linux下的执行文件查看源码,首先,在编译的时候要加入源码的链接,即在用gcc编译的时候加入源码的链接参数 gcc -g 。其次,要保证执行文件的源码存在。 用gdb查看源码的时候,用命令 list 查看。先进入(1)gdb 执行文件名。(2) list 行号,或者 函数名。 list 命令一次展示10行源码,按回车键重复执行list命令(回车键是重复上一个命令的执行),它会继续下一个10行代码的显示。list 函数名,是查看某一个函数的源码。
2、gdb 执行应用程序,单步调试
进入gdb后,输入 start, 程序断点在执行文件的入口函数main()处。如果要一行一行的执行代码,则输入next(简写n)回车,进入下一行。如果有函数调用,想进入到某个函数内部进行单行执行,则输入setp 命令进入函数内部。此时,会打印进入函数的前两行,如果要查看传给函数的参数是多少,可以通过backtrace命令(简写 bt)查看函数栈帧情况。具体的内容为进入的函数被谁调用,它的栈帧号为1,调用该函数的栈帧号为0。进入函数后,可用info locals命令查看函数内部局部变量的值。如果要看调用该函数的局部变量的值 只要先进入到调用函数,通过 frame 1(调用函数的栈帧号) 进入到调用函数,然后 info locals(简写 i locals)命令查看它的局部变量值。打印某一个局部变量的值,可通过 p 变量名 即可。 结束本函数的调试,输入 finish 即退出执行。
3、给某一行设置断点
gbd 进入执行文件源码后,用list 显示想要断点的代码行号,然后 break 行号(简写 b 行号),即在对应的行号设置了断点。start 命令执行到main函数等待下一个命令,如果不想一行一行的执行代码,而是想运行到断点处,则输入c (continue 命令到断点处停下来)。 断点也可以给设置在某个函数处,b 函数名即可。断点可以设置多个,可以通过info breakpoints 命令查看已经设置好的断点,每一个断点都有一个号,如果想去掉某个断点,则delete breakpoints 断点号 就可以了。如果不想删除断点,但有不想在该断点处停住,可以禁用该断点, 用命令 disable breakpoints 断点号 即可。 如果一次运行没有调试号,想重新来,则输入 run 从头开始执行代码。
断点某个文件的某行 或者某个函数 则命令为 break 文件名 行号/函数名 如果不清楚函数的具体名字而只知道开头,则可以输入函数的开头 然后tab键进行提示,gdb会列出所有以输入开头的函数。