Linux下的程序调试工具-----gdb(1)
2016-01-09 21:42
381 查看
星期五老师讲座的内容,整理一下。
调试程序的方法有两种,一是输出日志,二是设置断点一步步调试,观察当前状况是不是想要的结果。
由于我的电脑出了问题,只能通过gdb进行调试,所以下面着重记录关于gdb的用法。
首先,先要通过gcc来生成文件,这时需要在gcc的后面加上-g使文件在编译时产生调试信息。
之后便直接用gdb filename就可以进入调试的状态,使用run命令便可以让为文件开始运行,如果出现了错误便会停止下来并指出在第几行出现了错误。这时候我们使用l或者list便可以显示文件的前十行的编码,重复使用便可以依次向下显示。
如果我们想要看出错处程序中变量的值,我们只需要用print变量名就会显示出来了,也可以在print 表达式来显示自己想要测试的值。我们也可以使用info
local来显示当前所有的局部变量。还有一种好用的方式是使用display
变量名便可以在每一步时都显示该变量的值,更加有利于观察。
在允许程序自然终止的同时,我们使用'continue'
命令告诉 gdb 继续执行。
重点在于设置断点。
我们可以通过break <line number> if <conditional expression>的方式来设置断点,这个命令的意思是当程序运行到xx行并且xx条件成立时停止运行,后面的条件通常用于循环中,并且if后面的语句语法和c语言语法相同。当然,也可以不加if语句,甚至前面的行号也可以改为函数名。
我们可以通过使用info break命令来显示当前所设置的断点。
在运行到断点并暂停之后,我们可以使用continue、n(next)或者s(step)命令让程序继续运行。continue命令是让程序运行直到下一个断点处。n是让程序运行一行。s命令和n命令大体相同,唯一区别在于对待调用的函数语句上,如果使用s命令遇见了调用函数,便逐步运行被调用函数中的语句,而使用n命令则会将函数语句一次运行完。
(小技巧:如果使用了一次n或者s命令,下一次只需要使用回车键便可以达到相同目的了)
此时,我们如果想要退出gdb,只需要使用q(quit)命令就可以了。
这些只是gdb一些简单的应用,其他的作用在进一步学习后会在下一篇文章中提到,敬请期待!
调试程序的方法有两种,一是输出日志,二是设置断点一步步调试,观察当前状况是不是想要的结果。
由于我的电脑出了问题,只能通过gdb进行调试,所以下面着重记录关于gdb的用法。
首先,先要通过gcc来生成文件,这时需要在gcc的后面加上-g使文件在编译时产生调试信息。
之后便直接用gdb filename就可以进入调试的状态,使用run命令便可以让为文件开始运行,如果出现了错误便会停止下来并指出在第几行出现了错误。这时候我们使用l或者list便可以显示文件的前十行的编码,重复使用便可以依次向下显示。
如果我们想要看出错处程序中变量的值,我们只需要用print变量名就会显示出来了,也可以在print 表达式来显示自己想要测试的值。我们也可以使用info
local来显示当前所有的局部变量。还有一种好用的方式是使用display
变量名便可以在每一步时都显示该变量的值,更加有利于观察。
在允许程序自然终止的同时,我们使用'continue'
命令告诉 gdb 继续执行。
重点在于设置断点。
我们可以通过break <line number> if <conditional expression>的方式来设置断点,这个命令的意思是当程序运行到xx行并且xx条件成立时停止运行,后面的条件通常用于循环中,并且if后面的语句语法和c语言语法相同。当然,也可以不加if语句,甚至前面的行号也可以改为函数名。
我们可以通过使用info break命令来显示当前所设置的断点。
在运行到断点并暂停之后,我们可以使用continue、n(next)或者s(step)命令让程序继续运行。continue命令是让程序运行直到下一个断点处。n是让程序运行一行。s命令和n命令大体相同,唯一区别在于对待调用的函数语句上,如果使用s命令遇见了调用函数,便逐步运行被调用函数中的语句,而使用n命令则会将函数语句一次运行完。
(小技巧:如果使用了一次n或者s命令,下一次只需要使用回车键便可以达到相同目的了)
此时,我们如果想要退出gdb,只需要使用q(quit)命令就可以了。
这些只是gdb一些简单的应用,其他的作用在进一步学习后会在下一篇文章中提到,敬请期待!
相关文章推荐
- Linux下复制粘贴快捷键
- linux 添加用户、权限
- Linux——安装StarUML时提示依赖关系不满足libgcrypt11>=1.4.5
- Linux cmus
- Linux系统中System.map的解析
- Linux time()函数解析
- Linux tmux
- 【Zabbix】Linux监控软件安装与配置(三)
- CentOS5.8 HA集群之Corosync + Pacemaker + DRBD + MySQL实现MySQL高可用
- Linux_note 命令grep,sed,awk
- CentOS 加载/挂载 U盘 (转)
- centos 安装VMwareTools
- linux下搭建nagios监控
- linux下tar与rpm具体指令(安装)
- Linux字符设备驱动程序编写基本流程
- Linux无密登陆
- Linux简单的开始结束重启脚本
- How to set JAVA environment variables in Linux or CentOS
- linux AIO (异步IO) 那点事儿
- linux下异步RPC的阶段性总结-非阻塞SOCKET客户端